IIS 8.5 - Ошибка аутентификации взаимных сертификатов с ошибкой 403.16

Я использую Windows Server 2012 и IIS 8.5. Я установил SSL для веб-сайта, а настройки SSL: Требовать Обязательность и Требовать Сертификаты Клиентов.

Сертификат клиента, который я отправляю на сервер, выдается самозаверяющим органом (пусть называется MyCompany CA). Сертификат CA MyCompany успешно установлен в Учетной записи локального компьютера - доверенных корневых центров сертификации. Срок его действия составляет 2039, так что срок действия сертификата клиента.

Однако, со всей этой настройкой, я получаю ошибку 403.16 в качестве результата. Я включил Failed Request Tracing Rules и смог зарегистрировать ошибочный запрос и получил дополнительные сведения об этом:

52.- MODULE_SET_RESPONSE_ERROR_STATUS - Предупреждение ModuleName - IIS Web Core Уведомление - BEGIN_REQUEST HttpStatus - 403 HttpReason - Запрещено HttpSubStatus - 16 ErrorCode - цепочка сертификатов обрабатывается, но завершается в корневом сертификате, которому доверенный поставщик доверия не доверяет. (0x800b0109) ConfigExceptionInfo

Я проверил несколько сайтов относительно результата 403.16 и код ошибки 0x800b0109, и все они указывают на центр сертификации, который не был установлен в локальном компьютере - доверенные корневые центры сертификации, но это не мое дело.

Спасибо!

Ответы

Ответ 1

Я работаю над этим в течение долгого времени и, наконец, нашел его!

Добавить новый ключ в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL       Имя значения: ClientAuthTrustMode       Тип значения: REG_DWORD       Данные значения: 2

Обновите веб-страницу, выберите сертификат и посмотрите, как происходит волшебство.

Исследование

Используя Windows 8 и IIS 8.5, я выполнил инструкции здесь http://itq.nl/testing-with-client-certificate-authentication-in-a-development-environment-on-iis-8-5/.

Сертификаты были созданы в правильном месте и все настроено в IIS правильно, но я продолжал получать ошибки 403.16.

После того, как многие статьи MSDN и другие попытки не удались, я нашел следующий параметр реестра.

Установить HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL       Имя значения: ClientAuthTrustMode       Тип значения: REG_DWORD       Данные значения: 2

Установить HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL       Имя значения: SendTrustedIssuerList       Тип значения: REG_DWORD       Данные значения: 0 (False или полностью удалить эту клавишу)

Вот еще информация об этом конкретном параметре (здесь: http://technet.microsoft.com/en-us/library/hh831771.aspx)

По умолчанию для режимов доверия Существует три режима доверия аутентификации клиентов, поддерживаемых поставщиком Schannel. Режим доверия контролирует, как выполняется проверка цепочки сертификатов клиентов, и является общесистемной настройкой, управляемой REG_DWORD "ClientAuthTrustMode" в разделе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel.

0 Machine Trust (по умолчанию) Требуется, чтобы сертификат клиента выдавался сертификатом в списке "Надежные эмитенты".

1 Эксклюзивный корневой траст Требуется, чтобы сертификат клиента подключался к корневому сертификату, содержащемуся в доверенном хранилище доверенных клиентов. Сертификат также должен быть выпущен эмитентом в списке доверенных эмитентов

2 Эксклюзивный CA Trust Требуется, чтобы цепочка сертификатов клиента была либо промежуточным сертификатом ЦС, либо корневым сертификатом в указанном доверенном хранилище доверенных клиентов. Сведения об ошибках проверки подлинности из-за проблем с конфигурацией доверенных эмитентов см. В статье 280256 базы знаний.

Надеюсь, эта работа и для вас.

Ответ 2

Мне пришлось перезагрузить сервер, чтобы применить параметр ClientAuthTrustMode.

Ответ 3

Я попробовал решение, предложенное выше, и он отлично работает.

Альтернативное решение, которое не требует редактирования реестра:

https://support.microsoft.com/en-us/help/2795828/lync-server-2013-front-end-service-cannot-start-in-windows-server-2012

В этой статье основное внимание уделяется удалению всех не подписанных сертификатов из папки "Локальный компьютер доверенной корневой папки".

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

Если вы импортируете новые сертификаты вручную, убедитесь, что вы выбрали Надежные корневые центры сертификации самозаверяющие сертификаты и компьютеры Intermediate Органы сертификации хранят сертификаты, которые не являются самоподписанные сертификаты.

Вы можете найти все несамостоятельные сертификаты, используя Powershell script:

Get-Childitem cert:\LocalMachine\root -Recurse | Where-Object {$_.Issuer -ne $_.Subject} | Format-List * | Out-File "c:\computer_filtered.txt"

Переместите эти сертификаты в папку "Средние сертификационные центры" в mmc.