Отладка проблем с сертификатом клиента в IIS

У нас есть сервер IIS 2008R2 с сайтом, настроенным для запроса клиентских сертификатов. Наш тестовый клиент не работает, и мы пытаемся выяснить, почему.

В ходе этого мы установили новый сервер Server 2008 R2 (да, я знаю, что он старый, но это то, что запускает программное обеспечение), чтобы попытаться воспроизвести или определить способы устранения неполадок.

Один из способов, который мы исследуем, - это рукопожатие TLS. Тестовое приложение написано на .NET, и при включенной отладке System.Diagnostics в файл журнала помещается следующая запись:

System.Сетевая информация: 0: [22724] SecureChannel # 48979325 - У нас есть предоставленные пользователем сертификаты. Сервер указал 10 эмитентов. Ищем сертификаты, соответствующие любому из издателей.

Мы не можем увидеть этот список эмитентов, поэтому мы взломали OpenSSL. Выполнение следующей команды:

openssl s_client -connect win2k8r2-1.hsl10690.test:443 -state -no_ticket -servername win2k8r2-1.hsl10690.test

Результат:

   [...]
-----END CERTIFICATE-----
subject=/CN=testcert.hsl10690.test
issuer=/CN=Internal Dev CA 1
---
No client certificate CA names sent
---
SSL handshake has read 1013 bytes and written 329 bytes
   [...]

Итак, у нас есть несоответствие, когда стек Microsoft объявил, что сервер указал 10 эмитентов, но OpenSSL сообщает, что сервер не отправил имена CA.

В случае действующей системы журнал System.Diagnostics сообщает о 130 с лишним эмитентах, указанных сервером, но OpenSSL по-прежнему возвращает ноль.

Мы считаем, что проблема в том, что поставляемый нами сертификат клиента не соответствует одному из издателей (но мы подтвердили, что корень находится в хранилище доверенных сертификатов сервера, и мы проверили сертификат вне сервер). На активном сервере мы видим это в журналах после сообщения « Сервер указал ... »:

System.Net Information: 0 : [36484] SecureChannel#33675143 - We have user-provided certificates. The server has specified 133 issuer(s). Looking for certificates that match any of the issuers.
    ProcessId=20372
    DateTime=2018-12-20T13:33:39.9042036Z
System.Net Information: 0 : [36484] SecureChannel#33675143 - Left with 0 client certificates to choose from.
    ProcessId=20372
    DateTime=2018-12-20T13:33:39.9052036Z

во время тестирования, где все работает, он говорит:

System.Net Information: 0 : [22724] SecureChannel#48979325 - We have user-provided certificates. The server has specified 10 issuer(s). Looking for certificates that match any of the issuers.
    ProcessId=22100
    DateTime=2018-12-21T13:52:23.3718249Z
System.Net Information: 0 : [22724] SecureChannel#48979325 - Selected certificate: [Version]
  V3

[Subject]

Как мы можем найти какие сертификаты возвращаются сервером, и если мы обнаружим, что издатель отсутствует в списке, что могло помешать включению корневого каталога? Не исключаю, что мы упустили что-то очевидное, но мы этого еще не видели.

2
задан 21 December 2018 в 16:32
1 ответ

Мы наконец нашли ответ на этот вопрос: виноват KB931125. В статье блога описывается, что база знаний предназначена только для целей клиентов, но была отправлена ​​на серверы, что приводит к усечению списка CA, отправляемого IIS. Это на самом деле не объясняет, почему мы не могли увидеть переданный список CA с помощью OpenSSL, но в конечном итоге это привело нас к основной причине.

Статья в блоге указывает на дополнительную статью MSDN , в которой проблема описывается более подробно:

Эти проблемы могут возникнуть, если сервер TLS / SSL содержит много записей в список доверенных корневых сертификатов. Сервер отправляет список доверенные центры сертификации для клиента, если следующие условия верны:

  • Сервер использует безопасность транспортного уровня (TLS) / протокол SSL для шифрования сетевого трафика.
  • Клиентские сертификаты требуется для аутентификации во время рукопожатия аутентификации процесс.

Этот список доверенных центров сертификации представляет органы, от которых сервер может принимать сертификат клиента. К быть аутентифицированным сервером, клиент должен иметь сертификат который присутствует в цепочке сертификатов к корневому сертификату из списка серверов. Это потому, что сертификат клиента всегда сертификат конечного объекта в конце цепочки. Клиент сертификат не является частью цепочки.

В настоящее время максимальный размер доверенных центров сертификации список, который поддерживает пакет безопасности Schannel, составляет 16 КБ в Windows Server 2008, Windows Server 2008 R2 и Windows Server 2012.

В журнал событий также записывается запись (которую мы пропустили при первом просмотре):

При запросе аутентификации клиента этот сервер отправляет список доверенные центры сертификации для клиента. Клиент использует это список, чтобы выбрать сертификат клиента, которому доверяет сервер. В настоящее время этот сервер доверяет такому количеству центров сертификации, что список слишком длинный. Таким образом, этот список был усечен. В администратор этой машины должен просмотреть сертификат органы, которым доверяют аутентификацию клиентов, и удаляют те, которые делают на самом деле не нужно доверять.

В статье MSDN перечислено исправление:

Удалите следующий раздел реестра:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ SystemCertificates \ AuthRoot \ Certificates

Для этого выполните следующие действия:

  1. Запустите реестр Редактор
  2. Найдите следующий подраздел реестра: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ SystemCertificates \ AuthRoot
  3. Щелкните правой кнопкой мыши и затем удалите раздел, который называется «Certificates»
2
ответ дан 30 December 2019 в 18:59

Теги

Похожие вопросы