Назад | Перейти на главную страницу

«Не удалось получить доступ к закрытому ключу для настроенного сертификата».

Я пытаюсь (и не могу) заменить сертификаты для автономной установки ADFS 2.0. Я создал сертификаты и поместил их в хранилище локального компьютера. Но, что бы я ни делал, я неизбежно получаю ту же ошибку, о которой сообщается при запуске ADFS:

Во время обработки конфигурации службы федерации было обнаружено, что элемент «signedToken» содержит недопустимые данные. Не удалось получить доступ к закрытому ключу для настроенного сертификата. Ниже приведены значения сертификата:

Элемент: signatureToken

Тема: CN = сертификат подписи

Отпечаток: <snip>

storeName: Мой

storeLocation: 0

Удостоверение службы федерации: NT AUTHORITY \ NETWORK SERVICE

...

Действия пользователя

Если сертификат был импортирован из источника без закрытого ключа, выберите сертификат, у которого есть закрытый ключ, или повторно импортируйте сертификат из источника, который включает закрытый ключ (например, из файла .pfx).

Если сертификат был импортирован в контексте пользователя, убедитесь, что указанное выше хранилище соответствует хранилищу, в которое был импортирован сертификат.

Если сертификат был сгенерирован запросом сертификата, в котором не указан параметр «Машинный ключ», а ключ помечен как экспортируемый, экспортируйте сертификат с закрытым ключом из пользовательского хранилища в файл .pfx и снова импортируйте его непосредственно в хранилище, указанное в файле конфигурации. Если ключ не помечен как экспортируемый, запросите новый сертификат с помощью параметра «Машинный ключ».

Если удостоверению службы федерации не предоставлен доступ для чтения к закрытому ключу сертификата, исправьте это условие с помощью оснастки «Сертификаты».

Что ж, я выполнил все предложенные выше действия пользователя, и ни одно из них не помогло решить проблему. Я также не могу найти ни одного совета от кого-либо еще, какие диагностические шаги предпринять дальше. Итак, что мне теперь попробовать?

Я получаю 5 ошибок при перезапуске. Первые четыре такие же, как указано выше, с небольшими вариациями: Первый для Element: serviceIdentityToken и сертификат служебной связи, затем encryptionToken, additionalEncryptionTokens, и signingToken для сертификата, который я хочу использовать для расшифровки и подписи, и, наконец:

При включении конечных точек службы федерации произошла ошибка. Исправьте ошибки конфигурации с помощью командлетов PowerShell и перезапустите службу федерации.

Я предполагаю, что пятая ошибка связана с первыми четырьмя, но если нет, я могу добавить к ней более подробную информацию. Сертификаты SSL и подписи были созданы нашим центром сертификации домена.


Я хотел попытаться получить больше информации, поэтому (зная, что ADFS написан на .NET) я сколотил проект .NET Service, который просто пытался получить тот же закрытый ключ сертификата, и он выдает следующее исключение:

System.Security.Cryptography.CryptographicException: Invalid provider type specified.

   at System.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer)
   at System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandle& safeProvHandle, SafeKeyHandle& safeKeyHandle)
   at System.Security.Cryptography.RSACryptoServiceProvider.GetKeyPair()
   at System.Security.Cryptography.RSACryptoServiceProvider..ctor(Int32 dwKeySize, CspParameters parameters, Boolean useDefaultKeySize)
   at System.Security.Cryptography.X509Certificates.X509Certificate2.get_PrivateKey()
   at WindowsService1.Service1.DoStuff() in c:\Dev\WindowsService1\WindowsService1\Service1.cs:line 45

Некоторые поисковые запросы приводят меня к выводу, что это связано с хранением закрытых ключей с использованием CNG, который не работает в .NET (до 4.0?). Однако единственный совет, который я нашел по исправлению этой проблемы, - это либо а) изменить шаблоны на сервере CA (у меня лично нет доступа к этому), либо б) экспортировать и повторно импортировать сертификаты - но я уже пробовал это однажды.

Я не смог найти никакой последовательности экспорта и импорта сертификатов, чтобы исправить эту проблему, поэтому в конце концов мы скопировал шаблоны сертификатов для ADFS и веб-сервера и сделали новые шаблоны совместимыми с центрами сертификации 2003 года, а не только с 2008 годом.

Это, в свою очередь, позволяет нам выбирать более старые CSP, а не только те, которые основаны на CNG, и это все, что новые шаблоны позволили бы нам выбрать для хранения закрытых ключей.