Я столкнулся со следующей проблемой.
Я запускаю следующий код
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
и какие последствия это может иметь. Я имею в виду, что если это «хорошо», то почему по умолчанию он не включен и почему все-таки там?
Что именно происходит, когда я устанавливаю LoadUserProfile
пул IIS и какие негативные последствия это может иметь?
new X509Certificate2(keyFilePath, keyFilePassword, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.EphemeralKeySet)
что позволяет избежать записи закрытого ключа в хранилище и не требует административных привилегий на сервере.
new X509Certificate2(binaryData, password, X509KeyStorageFlags.MachineKeySet)
так, чтобы профиль пользователя не требовался.