В моем приложении ASP.NET я загружаю сертификат из хранилища сертификатов:сертификат закрытого ключа бросает CryptographicException под IIS Web Server
var myCert = CertificateUtils.GetCertificate("thumbprint");
Этот сертификат содержит пару ключей, который используется для расшифровки зашифрованного приложения настройки.
Сертификат установлен в Персональный магазин сертификатов под номером Локальный компьютер. Он работает хорошо, когда приложение работает под кодом IIS Express. Но если я его выполнил под номером Веб-сервер IIS, то myCert
экземпляр отсутствует личный ключ.
PrivateKey
поле myCert
объекта содержит исключение:
'myCert.PrivateKey' threw an exception of type 'System.Security.Cryptography.CryptographicException'
Я проверил, что другие поля myCert
объекта содержат одни и те же значения (как, например, серийный номер сертификата, отпечатком или истечения срока действия), так это то, кажется, что он получает тот же сертификат под обоими IIS и IIS Express. Только закрытый ключ отсутствует в случае полного IIS.
Единственное, что я изменил, это Local Development Server в свойствах проекта («Использовать IIE Express»/«Использовать веб-сервер IIS»). Он работает внутри Azure Emulator Express в обоих случаях.
У кого-нибудь есть идея, почему это происходит?
Я вижу. Это имеет смысл. Но что я могу сделать, чтобы использовать этот сертификат и ключи под полным IIS, пожалуйста? –
@DawidFerenczy вы можете предоставить идентификатор пула для доступа к сертификату. Это очень легко сделать в управлении сертификатами mmc. –
ОК, поэтому я определил пул приложений, используемый для моего приложения. Идентичность этого пула приложений установлена в «NetworkService», поэтому мне нужно предоставить доступ к сертификату для этой учетной записи, верно? Я проверил сертификаты в MMC, но мне не удалось найти, где настроены разрешения. Не могли бы вы мне помочь, пожалуйста? И какое разрешение мне нужно? –