SSL Configuration Generator https://ssl-config.mozilla.org/
Maxim Dounin
mdounin на mdounin.ru
Ср Янв 22 17:13:48 UTC 2020
Hello!
On Wed, Jan 22, 2020 at 05:04:33AM +0200, Gena Makhomed wrote:
[...]
> 1.
> В документации
> http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_protocols
> написано, что директиву ssl_protocols можно задавать на уровне server.
>
> Однако - если в default_server было задано ssl_protocols TLSv1.2;
> то в других server`ах директива ssl_protocols TLSv1.3; не работает.
>
> И наоборот, если в default_server задано ssl_protocols TLSv1.3;
> то в других server`ах директива ssl_protocols TLSv1.2; не работает.
>
> Это где ошибка - в документации на сайте или в коде nginx 1.17.8?
Возможность задания какой-либо директивы в контексте server - не
означает, что она будет применяться для всех запросов, попадающих
в этот блок server. В случае виртуальных серверов - могут быть
нюансы.
В данном случае проблема в том, что разрешённые протоколы
проверяются OpenSSL'ем в рамках начала SSL handshake'а, и
изменение списка разрешённых протоколов при переходе в другой блок
server по SNI - ни на чо не влияет, так как к моменту парсинга
расширения server_name - протокол уже зафиксирован. Ну и
очевидно, что переход в другой блок server в рамках HTTP-заголовка
Host - влияет ещё меньше.
Подробнее можно почитать тут и по ссылкам:
https://trac.nginx.org/nginx/ticket/844
Соответственно отвечая на заданный вопрос: ошибка - в понимании
написанного в документации.
> 2.
> Аналогичная проблема и с директивой ssl_ecdh_curve:
>
> В документации
> http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_ecdh_curve
> написано, что директиву ssl_ecdh_curve можно задавать на уровне server.
>
> Однако, nginx на эту директиву вообще никак не реагирует.
>
> У меня есть три тестовых сервера:
>
> server_name tls13-ecdsa-ecdhe-x25519.ideil.com;
> ssl_ecdh_curve X25519;
>
> server_name tls13-ecdsa-ecdhe-prime256v1.ideil.com;
> ssl_ecdh_curve prime256v1;
>
> server_name tls13-ecdsa-ecdhe-secp384r1.ideil.com;
> ssl_ecdh_curve secp384r1;
>
> В действительности - везде используется X25519 для Server Temp Key.
>
> Это где ошибка - в документации на сайте или в коде nginx 1.17.8?
В OpenSSL. Подробнее тут:
https://trac.nginx.org/nginx/ticket/1089
> 3.
> Третий вопрос, если можно:
>
> Тикет https://trac.nginx.org/nginx/ticket/1529 читал
> но по причине https://github.com/openssl/openssl/issues/7938
> - что нам с этим всем делать? Как управлять ciphers в TLS 1.3 ?
Проще всего - никак.
Если очень хочется, то спектр возможностей чуть расширяется:
Если речь про OpenSSL, то это можно делать через openssl.cnf.
Если речь про BoringSSL, то никак даже если очень хочется.
> Может быть все-таки имеет смысл сделать [недокументированную (?)]
> директиву ssl_ciphersuites которая будет управлять шифрами для TLS 1.3 ?
> Оставив директиву ssl_ciphers для управления шифрами TLS 1.2 и 1.1/1.0 ?
>
> Чтобы можно было, например, для теста настроить все возможные комбинации
> шифров TLS 1.3 (их всего три) и все возможные комбинации рекомендуемых
> сайтом https://wiki.mozilla.org/Security/Server_Side_TLS вариантов
> ecdh curve (их тоже всего три: X25519, prime256v1, secp384r1).
> Итого - только для TLS 1.3 получается всего 9 возможных комбинаций.
> Для всех возможных комбинаций - необходимо будет 36 различных серверов.
Задача "сделать тестовый стенд со всеми возможными комбинациями
параметров SSL / TLS" - это не совсем та задача, для которой
разрабатывается nginx.
> Кстати, google пошел еще дальше, и в конфигурации для www.google.com
> сделал возможность отдельно настраивать значение директивы
> ssl_prefer_server_ciphers и ssl_ciphers для TLS 1.3 и предыдущих версий.
>
> https://www.ssllabs.com/ssltest/analyze.html?d=www.google.com
Подозреваю, что на сервере BoringSSL. Там выбор шифров для
TLSv1.3 просто игнорирует все имеющиеся настройки.
> Может быть и для nginx был бы приемлимым более обобщенный синтаксис,
> например, что-то вроде такого:
>
> ssl_ciphers TLSv1.3 ................;
> ssl_ciphers TLSv1.2 ................;
> ssl_ciphers TLSv1.1 ................;
> ssl_ciphers TLSv1.0 ................;
>
> ssl_prefer_server_ciphers TLSv1.3 off;
> ssl_prefer_server_ciphers TLSv1.2 on;
> ssl_prefer_server_ciphers TLSv1.1 on;
> ssl_prefer_server_ciphers TLSv1.0 on;
>
> ?
Я не вижу решительно никаких причин для того, чтобы подобное
пытаться релизовывать.
--
Maxim Dounin
http://mdounin.ru/
Подробная информация о списке рассылки nginx-ru