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 Эта команда сбрасывает сведения о сертификате на экран.

Keyspec cert

В разделе 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-файла в хранилище сертификатов, выполнив следующие действия.

  1. Проверьте и запишите разрешения закрытого ключа для существующего сертификата, чтобы их можно было перенастроить при необходимости после повторного просмотра.
  2. Экспортируйте сертификат, включая закрытый ключ, в PFX-файл.
  3. Выполните следующие действия для каждого сервера AD FS и WAP.
    1. Удалите сертификат (с сервера AD FS или WAP).
    2. Откройте командную строку PowerShell с повышенными привилегиями.
    3. Импортируйте PFX-файл на каждом сервере AD FS и WAP с помощью следующего синтаксиса, указав AT_KEYEXCHANGE значение (которое работает для всех целей сертификата AD FS):
      1. certutil –importpfx certfile.pfx AT_KEYEXCHANGE
      2. Введите пароль PFX.
    4. После завершения приведенного выше процесса выполните указанные ниже действия.
      1. Проверьте разрешения закрытого ключа.
      2. Перезапустите службу AD FS или WAP.