Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Спецификация ключа ("KeySpec") — это свойство, связанное с сертификатом и ключом. Он указывает, можно ли использовать закрытый ключ, связанный с сертификатом, для подписывания, шифрования или обоих.
Неправильное значение KeySpec может привести к ошибкам AD FS и прокси-сервера веб-приложения, таким как:
- Не удалось установить подключение SSL/TLS к AD FS или прокси-серверу веб-приложения без регистрированных событий AD FS (хотя события SChannel 36888 и 36874 могут быть зарегистрированы)
- Ошибка входа на странице аутентификации на основе форм AD FS или WAP, при этом на странице не отображается сообщение об ошибке.
В журнале событий может появиться следующее событие:
Log Name: AD FS Tracing/Debug
Source: AD FS Tracing
Date: 2/12/2015 9:03:08 AM
Event ID: 67
Task Category: None
Level: Error
Keywords: ADFSProtocol
User: S-1-5-21-3723329422-3858836549-556620232-1580884
Computer: ADFS1.contoso.com
Description:
Ignore corrupted SSO cookie.
Что вызывает проблему
Свойство KeySpec определяет, как можно использовать ключ, созданный или полученный с помощью Microsoft CryptoAPI (CAPI) из устаревшего поставщика криптографических хранилищ Microsoft.
Значение KeySpec 1 или AT_KEYEXCHANGE можно использовать для подписывания и шифрования. Значение 2 или AT_SIGNATURE используется только для подписывания.
Наиболее распространенной ошибочной конфигурацией KeySpec является использование значения 2 для любого сертификата, кроме сертификата для подписи токенов.
Для сертификатов, ключи которых были созданы с помощью поставщиков шифрования следующего поколения (CNG), нет концепции спецификации ключа, и значение KeySpec всегда равно нулю.
Узнайте, как проверить допустимое значение KeySpec в следующем разделе этой статьи.
Example
Примером устаревшего криптографического провайдера является Расширенный криптографический провайдер Майкрософт.
Формат блоба ключа CSP Microsoft RSA включает идентификатор алгоритма, такой как CALG_RSA_KEYX или CALG_RSA_SIGN соответственно, для обработки запросов на ключи AT_KEYEXCHANGE или AT_SIGNATURE.
Идентификаторы алгоритма ключа RSA связываются со значениями KeySpec следующим образом.
| Поддерживаемый поставщиком алгоритм | Значение спецификации ключа для вызовов CAPI |
|---|---|
CALG_RSA_KEYX : ключ RSA, который можно использовать для подписывания и расшифровки |
AT_KEYEXCHANGE (или KeySpec=1) |
CALG_RSA_SIGN : ключ только для подписи RSA |
AT_SIGNATURE (или KeySpec=2) |
Значения KeySpec и связанные значения
Ниже приведены значения различных значений KeySpec:
| Значение Keyspec | Means | Рекомендуемое использование AD FS |
|---|---|---|
0 |
Сертификат является сертификатом CNG | Только SSL-сертификат |
1 |
Для устаревшего сертификата CAPI (не CNG) ключ можно использовать для подписывания и расшифровки | SSL, подпись токена, расшифровка токенов, сертификаты для связи служб |
2 |
Для устаревшего сертификата CAPI (не CNG) ключ можно использовать только для подписывания. | не рекомендуется |
Проверка значения KeySpec для сертификатов и ключей
Чтобы просмотреть значение сертификата, можно использовать средство командной certutil строки.
Ниже приведен пример: certutil –v –store my. Эта команда сбрасывает сведения о сертификате на экран.
В разделе CERT_KEY_PROV_INFO_PROP_ID найдите две вещи:
ProviderType: Это означает, используется ли сертификат устаревшим поставщиком криптографических хранилищ (CSP) или поставщиком хранилища ключей на основе более новых API следующего поколения сертификатов (CNG). Любое ненулевое значение указывает на поставщика устаревшей технологии.
KeySpec: В следующей таблице показаны допустимые
KeySpecзначения сертификата AD FS:Устаревший поставщик CSP (ProviderType не равен 0):
Назначение сертификата AD FS Допустимые значения KeySpec Обмен данными между службами 1 Расшифровка токенов 1 Подписывание токенов 1 и 2 SSL 1 Поставщик CNG (ProviderType = 0):
Назначение сертификата AD FS Допустимые значения KeySpec SSL 0
Как изменить ключи для сертификата на поддерживаемое значение
Изменение значения KeySpec не требует повторного создания или повторного создания сертификата. КлючSpec можно изменить, повторно включив полный сертификат и закрытый ключ из PFX-файла в хранилище сертификатов, выполнив следующие действия.
- Проверьте и запишите разрешения закрытого ключа для существующего сертификата, чтобы их можно было перенастроить при необходимости после повторного просмотра.
- Экспортируйте сертификат, включая закрытый ключ, в PFX-файл.
- Выполните следующие действия для каждого сервера AD FS и WAP.
- Удалите сертификат (с сервера AD FS или WAP).
- Откройте командную строку PowerShell с повышенными привилегиями.
- Импортируйте PFX-файл на каждом сервере AD FS и WAP с помощью следующего синтаксиса, указав
AT_KEYEXCHANGEзначение (которое работает для всех целей сертификата AD FS):certutil –importpfx certfile.pfx AT_KEYEXCHANGE- Введите пароль PFX.
- После завершения приведенного выше процесса выполните указанные ниже действия.
- Проверьте разрешения закрытого ключа.
- Перезапустите службу AD FS или WAP.