после того, как все прошло гладко в моих предыдущих средах развертывания, я переместил свой сайт на сервер 2008 R2 box ...
У меня есть служба wcf с поддержкой Silverlight (в IIS), которая вызывает другую внешнюю службу, но моя служба wcf не может найти сертификат, необходимый для доступа к внешней службе.
Вероятно, сертификат CN=blahblah.com, OID.1.2.840.113549.1.9.2=MyName, OU=MyCompany, O=Provider Group
может не иметь закрытого ключа, который способен к обмену ключами, или процесс может не иметь прав доступа к закрытому ключу. Пожалуйста, смотрите внутреннее исключение для деталей.
Мой веб-сайт (и его служба wcf) работают в пользовательском пуле приложений, и я добавил эту учетную запись пула приложений, чтобы иметь доступ к сертификату. Я подтвердил, что эта учетная запись имеет доступ через ключ -l утилиты winhttpcertcfg.exe.
Сертификат находится на локальном компьютере - персональный (мой), и мой файл web.config соответствует этому:
<clientCertificate findValue="blahblah.com" storeLocation="LocalMachine"
storeName="My" x509FindType="FindBySubjectName" />
Я также играл с инструментом FindPrivateKey.exe
, чтобы найти путь к файлу закрытого ключа (который был D:\Users\\myaccountname\AppData\Roaming\Microsoft\Crypto\RSA)
, и я дал «всем» разрешения на этот путь, но все равно не повезло.
Используя ProcMon, я вижу, что папка D:\Users\\theApplicationPoolAccount\AppData\Roaming\Microsoft\Crypto\RSA\
запрашивается. Когда я вызываю свой сервис так, чтобы он смотрел на текущего пользователя (это странно), так как мой web.config выше явно указывает на поиск сертификата в LocalMachine\My
...
Когда я все-таки установил сертификат, сначала он пошел в хранилище CurrentUser\My
(мне не дали установить его в LocalMachine\My
), но затем я смог перетащить сертификат в хранилище LocalMachine\My
Кому-нибудь повезло, читая закрытые ключи сертификатов в windows server 2008?