137 votes

Que se passe-t-il exactement lorsque je règle LoadUserProfile du pool IIS ?

J'ai été confronté au problème suivant.

J'exécute le code suivant

var binaryData = File.ReadAllBytes(pathToPfxFile);
var cert = new X509Certificate2(binaryData, password);

en deux processus. L'un des processus fonctionne sous LOCAL_SYSTEM et là, ce code réussit. Un autre code s'exécute dans IIS sous un compte d'utilisateur local appartenant au groupe local "Users" et là 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

Alors j'ai fait un peu de recherche sur Google et j'ai trouvé cette réponse à une 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 lorsque je mets LoadUserProfile et les conséquences que cela pourrait avoir. Je veux dire que si c'est une "bonne" chose, pourquoi n'est-elle pas activée par défaut et pourquoi est-elle là après tout ?

Que se passe-t-il exactement quand je mets LoadUserProfile dans le pool IIS et quelles conséquences négatives cela peut-il avoir ?

160voto

vcsjones Points 51910

Je veux dire que si c'est une "bonne" chose, pourquoi n'est-elle pas activée par défaut et pourquoi est-elle là après tout ?

IIS 6 n'a jamais chargé les profils des utilisateurs. Je suppose que cette option est désactivée par défaut pour conserver un comportement cohérent, et qu'un administrateur doit choisir de l'activer.

J'ai essayé d'activer LoadUserProfile pour le pool d'applications et cela fonctionne maintenant.

Cela est probablement dû au fait que le fournisseur de services cryptographiques de Windows a essayé de stocker ou de charger une clé pour votre certificat dans le magasin de l'utilisateur, et comme un profil n'était pas disponible, un message d'erreur a été envoyé. contexte cryptographique n'était pas disponible. Il convient de noter que le Load User Profile Ce paramètre ne s'applique qu'aux comptes d'utilisateurs. Les comptes de service comme NETWORK SERVICE et ApplicationPoolIdentity ont un traitement spécial.

Que se passe-t-il exactement lorsque je configure LoadUserProfile dans le pool IIS ?

Le profil de l'utilisateur est chargé. Cela inclut son magasin cryptographique, les variables d'environnement telles que %TEMP%, et d'autres.

Ce qui revient finalement à dire que LoadUserProfile est appelé par IIS quand l'AppPool démarre.

quelles conséquences négatives peut-il avoir ?

Cela peut rompre la rétrocompatibilité avec une application fonctionnant sous IIS 6, qui ne chargeait pas le profil de l'utilisateur. Les variables d'environnement sont chargées. Par exemple, lorsque Load User Profile est vrai, la variable d'environnement %TEMP% est la suivante C:\Users\AccountName\AppData\Local\Temp (par exemple). Lorsqu'il est faux, c'est C:\WINDOWS\Temp .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X