Ошибка 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
в доверенные корневые центры сертификации по учетной записи компьютера → локальный компьютер. Я удалил это, а затем все сработало.