Ошибка HTTP 403.16 - проблема доверия к сертификату клиента

Я пытаюсь внедрить аутентификацию сертификата клиента в IIS 8. Я развернул свою конфигурацию на машине разработки и проверил ее работу как ожидалось. Однако после настройки на сервере, всякий раз, когда я перехожу к сайту и запрашивается сертификат клиента, я выбираю его и сразу получаю ошибку 403.16. В журнале неудачных запросов выдается код ошибки 2148204809 и сообщение "Цепочка сертификатов обработана, но завершена в корневом сертификате, которому не доверяет поставщик доверия".

У меня есть действительный клиентский сертификат, а также действительный сертификат CA. Сертификат CA устанавливается в доверенных корневых центрах на учетной записи компьютера как на сервере, так и на клиентском компьютере, а сертификат клиента устанавливается в личной области учетной записи "Текущий пользователь" на клиентской машине.

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

У конфигурации IIS есть sslFlags = SslNegotiateCert и iisClientCertificateMappingAuthentication включена.

Сервер не настроен для отправки CTL, и у нас есть SendTrustedIssuerList = 0.

Я не понимаю, почему сертификату клиента не следует доверять.

Ответы

Ответ 1

В Windows 2012 были введены более строгие проверки хранилища сертификатов. Согласно KB 2795828: служба Front Line Lync Server 2013 не может запускаться в Windows Server 2012, в хранилище доверенных корневых центров сертификации (то есть Root) могут быть только сертификаты, которые являются собственностью -signed. Если в этом хранилище содержатся несамоходные сертификаты, аутентификация сертификата клиента в IIS возвращается с кодом ошибки 403.16.

Чтобы решить эту проблему, вам нужно удалить все несамоходные сертификаты из корневого хранилища. Эта команда PowerShell будет идентифицировать несамоходные сертификаты:

Get-Childitem cert:\LocalMachine\root -Recurse | 
    Where-Object {$_.Issuer -ne $_.Subject}

В моей ситуации мы перенесли эти несамозаписываемые сертификаты в хранилища промежуточных сертификатов (например, CA):

Get-Childitem cert:\LocalMachine\root -Recurse | 
    Where-Object {$_.Issuer -ne $_.Subject} | 
    Move-Item -Destination Cert:\LocalMachine\CA

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

[T] максимальный размер списка доверенных сертификатов, который поддерживает пакет безопасности Schannel, составляет 16 килобайт (КБ). Наличие большого количества сторонних корневых центров сертификации будет превышать лимит в 16 тыс., И вы столкнетесь с проблемами связи TLS/SSL.

Решение в этой ситуации заключается в том, чтобы удалить все сертификаты центра сертификации, которым вы не доверяете, или чтобы прекратить отправку списка доверенных сертификационных органов, установив запись реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\@SendTrustedIssuerList в 0 (по умолчанию, если нет, равно 1).

Ответ 2

В моем случае я добавлял корневой сертификат в хранилище сертификатов "текущий пользователь" на сервере и получал ошибку 403.16.

Добавление моего корневого сертификата в хранилище доверенных корневых ресурсов для локального компьютера разрешило проблему.

Выполните следующие шаги на сервере, на котором запущен IIS.

Для Windows Server 2008 R2:

  • Щелкните правой кнопкой мыши файл сертификата и выберите "Установить сертификат". Нажмите Далее.
  • Выберите "Поместить все сертификаты в следующее хранилище" и нажмите "Обзор..."
  • Отметьте "Показать физические магазины"
  • Разверните "Доверенные корневые центры сертификации" и выберите "Локальный компьютер". Нажмите "ОК".
  • Нажмите "Далее" / "Готово".

Для Windows Server 2012 R2:

  • Щелкните правой кнопкой мыши файл сертификата и выберите "Установить Сертификат".
  • Выберите "Локальный компьютер". Нажмите "Далее" .
  • Выберите "Поместить все сертификаты в следующее хранилище" и нажмите "Обзор..."
  • Выберите "Доверенные корневые центры сертификации" . Нажмите "ОК".
  • Нажмите "Далее" / "Готово".

Для Windows 7:

  • Пуск → Выполнить → mmc.exe
  • Файл → "Добавить или удалить оснастки". Выберите "Сертификаты", нажмите "Добавить > " и выберите "Учетная запись компьютера", а затем "Локальный компьютер". Нажмите "Готово" / "ОК"
  • Развернуть сертификаты (локальный компьютер) → Доверенные корневые центры сертификации → Сертификаты. Щелкните правой кнопкой мыши Сертификаты и выберите "Все задачи → Импорт".
  • Выберите файл сертификата и нажмите "Далее" .
  • Выберите "Поместить все сертификаты в следующее хранилище" и нажмите "Обзор..."
  • Отметьте "Показать физические магазины"
  • Разверните "Доверенные корневые центры сертификации" и выберите "Локальный компьютер". Нажмите "ОК".
  • Нажмите "Далее" / "Готово".

Ответ 3

Я получил эту ошибку в IIS Express:

Ошибка HTTP 403.16 - Запрещено

Ваш сертификат клиента не является доверенным или недействительным.

Глядя на TraceLogFiles, я увидел следующую ошибку:

<RenderingInfo Culture="en-US">
 <Opcode>MODULE_SET_RESPONSE_ERROR_STATUS</Opcode>
 <Keywords>
  <Keyword>RequestNotifications</Keyword>
 </Keywords>
 <freb:Description Data="Notification">BEGIN_REQUEST</freb:Description>
 <freb:Description Data="ErrorCode">A certificate chain processed, but terminated in a root certificate which is not trusted by the trust provider.
(0x800b0109)</freb:Description>
</RenderingInfo>

Выключившись, когда я установил Razer Synapse, установка также поместила сертификат для chromasdk.io в доверенные корневые центры сертификации по учетной записи компьютера → локальный компьютер. Я удалил это, а затем все сработало.