Я зіткнувся з наступним питанням.
Я запускаю наступний код
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)
таким чином, щоб профіль користувача не був потрібним.