У меня возникла следующая проблема.
Я запускаю следующий код
var binaryData = File.ReadAllBytes(pathToPfxFile);
var cert = new X509Certificate2(binaryData, password);
в двух процессах. Один из процессов работает под LOCAL_SYSTEM
, и этот код преуспевает. Другой работает внутри IIS под локальной учетной записью пользователя, принадлежащей локальной группе "Пользователи", и я получаю следующее исключение:
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
Итак, я немного искал и нашел этот ответ в виде подобного вопроса. Я попытался включить LoadUserProfile
для пула приложений и теперь работает.
Проблема в том, что я не понимаю, что именно происходит, когда я устанавливаю LoadUserProfile
и какие последствия могут иметь. Я имею в виду, если это "хорошая" вещь, то почему она не "on" по умолчанию и почему она существует в конце концов?
Что именно происходит, когда я устанавливаю LoadUserProfile
в пуле IIS и какие его последствия могут иметь?