AD FS и сведения о свойстве KeySpec сертификата
Спецификация ключа ("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) из устаревшего поставщика криптографических служба хранилища (CSP).
Значение KeySpec 1 или AT_KEYEXCHANGE можно использовать для подписывания и шифрования. Значение 2 или AT_SIGNATURE используется только для подписывания.
Наиболее распространенной неправильной конфигурацией KeySpec является использование значения 2 для сертификата, отличного от сертификата подписи маркера.
Для сертификатов, ключи которых были созданы с помощью поставщиков шифрования следующего поколения (CNG), нет концепции спецификации ключа, и значение KeySpec всегда равно нулю.
Узнайте, как проверка для допустимого значения KeySpec в следующем разделе этой статьи.
Пример
Пример устаревшей службы CSP является поставщиком расширенного шифрования Майкрософт.
Формат большого двоичного объекта 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:
Значение Keypec | Означает | Рекомендуемое использование 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.