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.
InformationsquelleAutor sharptooth | 2013-06-17