Ce qui se passe exactement lorsque j'ai mis LoadUserProfile de IIS piscine?
J'ai affronté le problème suivant.
J'exécute le code suivant
var binaryData = File.ReadAllBytes(pathToPfxFile);
var cert = new X509Certificate2(binaryData, password);
dans les deux processus. L'un des processus s'exécute sous LOCAL_SYSTEM
et il y a ce code réussit. Un autre s'exécute à l'intérieur de IIS sous un compte d'utilisateur local appartenant à des "Utilisateurs" groupe local et là, je reçois l'exception suivante:
System.Security.Cryptography.CryptographicException
Object was not found.
at System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr)
at System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromBlob(Byte[] rawData, IntPtr password, UInt32 dwFlags, Boolean persistKeySet, SafeCertContextHandle& pCertCtx)
at System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob(Byte[] rawData, Object password, X509KeyStorageFlags keyStorageFlags)
at System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(Byte[] rawData, String password)
//my code here
Donc je l'ai Googlé un peu et trouve cette réponse à une sorte de question similaire. J'ai essayé d'activer LoadUserProfile
pour l'application de la piscine et cela fonctionne maintenant.
Le problème est que je ne comprends pas ce qui se passe exactement lorsque j'ai mis LoadUserProfile
et quelles en sont les conséquences que pourrait avoir. Je veux dire, si c'est une "bonne" chose, alors pourquoi il n'est pas "sur" par défaut et pourquoi elle est là, après tout?
Ce qui se passe exactement lorsque j'ai mis LoadUserProfile
dans IIS piscine et quelles conséquences négatives qu'elle peut avoir?
- Seulement après coup, si le chargement du profil de l'utilisateur est un problème pour vous, vous pouvez changer votre installation de chargement du certificat de
new X509Certificate2(binaryData, password, X509KeyStorageFlags.MachineKeySet)
donc un profil d'utilisateur n'est pas nécessaire. - Si en cours d'exécution comme ApplicationPoolIdentity, vous souhaitez utiliser
new X509Certificate2(keyFilePath, keyFilePassword, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.EphemeralKeySet)
qui évite d'écrire la clé privée à la boutique et pas besoin de privilèges d'administrateur sur le serveur.
Vous devez vous connecter pour publier un commentaire.
IIS 6 jamais chargé des profils d'utilisateur. Je suppose que cela est désactivée par défaut pour conserver le comportement cohérent, et un administrateur a de l'opt-in à elle.
C'est probablement parce que les Fenêtres Fournisseur de Services de Chiffrement a été d'essayer de stocker ou de charger une clé pour votre certificat dans le magasin de l'utilisateur, et depuis un profil n'est pas disponible, un cryptographiques contexte n'était pas disponible. Notez que le
Load User Profile
paramètre s'applique uniquement à des comptes d'utilisateur. Les Comptes de Service comme SERVICE RÉSEAU et ApplicationPoolIdentity ont un traitement spécial.Bien, le profil de l'utilisateur est chargé. Ce qui inclut le chiffrement magasin, les variables d'environnement telles que %TEMP%, et les autres.
Ce qu'il finit par se résume à
LoadUserProfile
est appelé par IIS lorsque le pool d'applications commence.Il peut casser la compatibilité avec une application qui a couru sur IIS 6, qui n'a pas charger le profil utilisateur. Les variables d'environnement sont chargés. Par exemple, lorsque de Charger le Profil Utilisateur est vraie, la variable d'environnement %TEMP est
C:\Users\AccountName\AppData\Local\Temp
(par exemple). Si la valeur est false, c'estC:\WINDOWS\Temp
.LoadUserProfile=true
dans IIS et modifier la valeur par défaut temp dossier %TEMP% deC:\Users\C:\Users\AccountName\AppData\Local\Temp
à quelque part d'autre? exemple "D:\AppTempData"