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