Браузеры Chromium TLS1.2 не работают с сертификатом, выданным ADCS на сервере 2012 R2
tl;dr: TLS 1.2 между Server 2012 R2 и браузерами на базе Chromium завершается сбоем при использовании сертификатов, выпущенных AD CS. Отлично работает на сервере 2016+ и на 2012 R2 с Firefox/IE/Cygwin-curl.
У нас есть несколько внутренних веб-серверов Server 2012 R2, на которых мы пытаемся перенести общедоступные сертификаты на сертификаты, выданные нашим интегрированным центром сертификации AD, и исключить менее безопасные настройки шифрования, включая CBC MAC. Сервер 2012 R2 не поддерживает ECDHE_RSA с GCM, а это означает, что мы пытаемся использовать сертификат на основе ECDH. Однако мы столкнулись с аналогичной проблемой, когда разрешили наборы шифров с CBC-MAC, например TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, с сертификатом RSA, выданным тем же центром сертификации. Используя наш общедоступный сертификат с подстановочными знаками, выданный GlobalSign, мы можем подключаться ко всем браузерам.
Корпоративный центр сертификации и автономный корневой центр сертификации являются доверенными, и мы убедились, что они работают правильно. Сертификаты, использующие несколько разных шаблонов, выданные серверам 2016 и 2019 годов, работают без проблем во всех браузерах. Шаблоны на основе ECDH и RSA одинаково хорошо работают в версиях 2016+.
Крипто-шаблон сертификата ECDH:
Крипто-шаблон сертификата RSA:
Сертификаты RSA и ECDH на серверах 2012 R2 принимаются Firefox (как только ему было сказано доверять им как через политику, так и вручную устанавливая
Firefox показывает, что он подключается с помощью TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, который, согласно Qualys , поддерживается в версии Chrome, которую мы используем.
С ECDH
PORT STATE SERVICE
443/tcp open https
| ciphers:
| TLSv1.1:
| ciphers:
| TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (secp256r1) - A
| TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (secp256r1) - A
| compressors:
| NULL
| cipher preference: server
| TLSv1.2:
| ciphers:
| TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (secp256r1) - A
| TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 (secp256r1) - A
| TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (secp256r1) - A
| TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (secp256r1) - A
| compressors:
| NULL
| cipher preference: server
|_ least strength: A
Каждый раз, когда мы пытаемся подключиться к Chrome, регистрируется пара событий 36874/36888, в которых говорится, что на клиенте не было поддерживаемых наборов шифров.
Список наборов шифров, с которыми мы столкнулись с проблемой при использовании сертификата, выданного центром сертификации предприятия, большинство из которых были включены только для тестирования (предупреждения удалены):
PORT STATE SERVICE
443/tcp open https
| ciphers:
| SSLv3:
| ciphers:
| TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
| TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - C
| TLS_RSA_WITH_RC4_128_MD5 (rsa 2048) - C
| compressors:
| NULL
| cipher preference: server
| warnings:
| TLSv1.0:
| ciphers:
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 1024) - A
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 1024) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
| TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - C
| TLS_RSA_WITH_RC4_128_MD5 (rsa 2048) - C
| compressors:
| NULL
| cipher preference: server
| TLSv1.1:
| ciphers:
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 1024) - A
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 1024) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
| TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - C
| TLS_RSA_WITH_RC4_128_MD5 (rsa 2048) - C
| compressors:
| NULL
| cipher preference: server
| TLSv1.2:
| ciphers:
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (secp256r1) - A
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (secp256r1) - A
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A
| TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 1024) - A
| TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (dh 1024) - A
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 1024) - A
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 1024) - A
| TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) - A
| TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA256 (rsa 2048) - A
| TLS_RSA_WITH_AES_128_CBC_SHA256 (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
| TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - C
| TLS_RSA_WITH_RC4_128_MD5 (rsa 2048) - C
| compressors:
| NULL
| cipher preference: server
|_ least strength: C
Мои вопросы:
- Почему браузерам на базе Chromium не удается согласовать набор шифров, когда сервер предлагает совместимые наборы шифров?
- Что мне нужно настроить, чтобы разрешить Server 2012 R2 использовать внутренние сертификаты?
- Есть ли лучший способ справиться с тем, что я пытаюсь сделать, кроме обновления серверов приложений до 2016/2019? На данный момент кажется, что полное отключение TLS и размещение всего за LB/обратным прокси-сервером может быть лучшей идеей, даже если это односерверные решения.
РЕДАКТИРОВАТЬ: я обнаружил ошибку в Chromium , и они подтвердили, что наборы шифров, предлагаемые сервером, должны быть приняты Chrome. Сейчас они проводят расследование после того, как я предоставил сетевые журналы, полученные через CHROME://Net-Export. Это может быть связано со старой ошибкой Chrome/2012 . Как только Google сообщит о проблеме, я снова обновлю этот пост. Однако на данный момент похоже, что с конфигурацией с нашей стороны все в порядке.
Спасибо за поиск!