Когда мне нужно, чтобы "Согласовать сертификат клиента" был включен?
При желании я хочу поддержать клиентские сертификаты. Вот почему я установил Client certificates
в Accept
на IIS. Это работает на большинстве машин. Однако на некоторых машинах IIS возвращает 500. Это может быть "решено" путем установки Client certificates
в Ignore
(что не вариант для меня) или путем установки Negotiate Client Certificate
в Enabled
(это может быть сделано с netsh http add ...
или путем изменения DefaultFlags
до 2 в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\SslBindingInfo\0.0.0.0:443\
; это также можно изменить в диспетчере IIS?). Хотя (включение) этого параметра звучит разумно, просто взглянув на название, я не понимаю, зачем оно нужно на некоторых машинах, а не на других...
1 ответ
TL;DR
Вы можете включить это все время, если вам требуется сертификат клиента для доступа к любому ресурсу на сервере. Основная причина заключается в том, что некоторые клиенты не допускают повторное согласование TLS из-за возможных атак Man-in-the-Midddle (MITM).
Вы можете отключить это, если ваши клиенты поддерживают пересмотр TLS и риск MITM приемлем.
Описание
IIS имеет два способа согласования TLS:
- Куда клиент отправляет сертификат клиента в начальном запросе. Это полезно, когда все ресурсы на сервере требуют аутентификации клиента TLS.
- Где клиент не отправляет клиента в начальном запросе, но позже после того, как IIS выполняет повторное согласование TLS. Это полезно, когда только некоторые ресурсы требуют аутентификации клиента TLS.
Negotiate Client Certificate
Параметр определяет, какой из них используется: первый, если он включен, и второй, если он отключен. Вот еще из блога Microsoft:
- Если этот параметр включен, клиентский сертификат будет отправлен клиентским браузером при согласовании начального безопасного соединения с веб-сервером.
- Если оно отключено, начальное безопасное соединение будет согласовано между веб-сервером и браузером на основе сертификата сервера, а затем соединение будет повторно согласовано, когда клиент отправит сертификат клиента.
Поддержка клиентов и ошибка
Проблема заключается в том, что некоторые клиенты не пересматривают сеанс TLS. Если клиент этого не делает, вы можете столкнуться со следующей ошибкой в журнале сервера. настройка Negotiate Client Certificate
в Enabled
могу это исправить.
The following fatal alert was generated: 20. The internal error state is 960.
TLS Re-Regotiation MITM Attack
Причина, по которой некоторые клиенты не пересматривают соединение TLS, связана с атаками типа "человек-посредник" (MITM), связанных с пересогласованием TLS:
С момента обнаружения атаки MITM вокруг SSL Renegotiation, ответом во многих кругах было зависание на запросах повторного связывания.
- Сделайте так, чтобы IIS требовал сертификат клиента SSL во время первоначального рукопожатия
- http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.156.4428&rep=rep1&type=pdf
- https://security.stackexchange.com/questions/63867/ssl-tls-renegotiation-handshakes-mitm-plaintext-data-injection-medium-or-low
Клиенты, требующие Negotiate Client Certificate
скорее всего, сделать это, чтобы предотвратить атаки MITM во время повторного согласования TLS.
Резюме
Если у вас нет проблем, требующих сертификатов клиентов для всех ресурсов IIS, включение этой функции может позволить вам взаимодействовать с большим количеством клиентов и обеспечить дополнительную защиту вашего трафика.
Отключите эту опцию для поддержки дифференциальной аутентификации клиента TLS, одновременно понимая риски MITM.