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 mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru