J'ai fait face au problème suivant.
Je lance le code suivant
var binaryData = File.ReadAllBytes(pathToPfxFile);
var cert = new X509Certificate2(binaryData, password);
en deux processus. L'un des processus s'exécute sous LOCAL_SYSTEM
et là ce code réussit. Un autre tourne à l'intérieur de IIS sous un compte d'utilisateur local appartenant au groupe local "Utilisateurs" et j'obtiens 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
J'ai donc cherché un peu dans Google et trouvé cette réponse à une sorte de question similaire. J'ai essayé d'activer LoadUserProfile
pour le pool d'applications et cela fonctionne maintenant.
Le problème est que je ne comprends pas ce qui se passe exactement quand je mets LoadUserProfile
et quelles en seraient les conséquences. Je veux dire si c'est une "bonne" chose alors pourquoi ce n'est pas "activé" par défaut et pourquoi est-il là après tout?
Que se passe-t-il exactement lorsque je définis LoadUserProfile
dans IIS pool et quelles conséquences négatives peut-il avoir?
Je veux dire si c'est une "bonne" chose alors pourquoi ce n'est pas "activé" par défaut et pourquoi est-il là après tout?
IIS 6 n'a jamais chargé de profils utilisateur. Je suppose que cette option est désactivée par défaut pour maintenir la cohérence du comportement, et qu'un administrateur doit y adhérer.
J'ai essayé d'activer LoadUserProfile pour le pool d'applications et cela fonctionne maintenant.
Cela est très probablement dû au fait que le fournisseur de services cryptographiques Windows essayait de stocker ou de charger une clé pour votre certificat dans le magasin d'utilisateurs et qu'un profil n'étant pas disponible, un contexte cryptographique n'était pas disponible. Notez que le paramètre Load User Profile
Ne s'applique qu'aux comptes d'utilisateurs. Les comptes de service tels que NETWORK SERVICE et ApplicationPoolIdentity font l'objet d'un traitement spécial.
Que se passe-t-il exactement lorsque je configure LoadUserProfile dans le pool IIS
Eh bien, le profil de l'utilisateur est chargé. Cela inclut leur magasin cryptographique, les variables d’environnement telles que% TEMP% et d’autres.
Cela se résume finalement à LoadUserProfile
est appelé par IIS au démarrage de l'AppPool.
quelles conséquences négatives peut-il avoir?
La compatibilité avec une application exécutée sur IIS 6, qui n'a pas chargé le profil d'utilisateur.) Risque d'être rompue avec celle-ci. Les variables d'environnement sont chargées. Par exemple, lorsque Load User Profile est défini sur true,% La variable d'environnement TEMP% est C:\Users\AccountName\AppData\Local\Temp
(Par exemple). Lorsque la valeur est false, il s'agit de C:\WINDOWS\Temp
.