Дано:
nginx 1.23 (сборка под bullseye с nginx.org), openssl 1.1.1n (из debian)
два сертификата от LE, RSA и P-256.
testssl.sh
Нужно сделать, чтобы старые клиенты, умеющие только TLSc1/RSA, могли подключаться.
Запускаем testssl.sh, TLSv1 и 1.1 не работают (только 1.2):
SSLv2 not offered (OK)
SSLv3 not offered (OK)
TLS 1 offered (deprecated)
TLS 1.1 offered (deprecated)
TLS 1.2 offered (OK)
TLS 1.3 not offered and downgraded to a weaker protocol
Убираем один из сертификатов — TLSv1 появляется, с двумя — только 1.2
Идём, например, на
https://ssl-config.mozilla.org/#server=nginx&version=1.23&config=old&openssl=1.1.1n&hsts=false&ocsp=false&guideline=5.6
прописываем ssl_ciphers оттуда.
Не помогает.
Добавляем в конец списка шифров :@SECLEVEL=0
TLSv1 начинает работать.
Решил редуцировать пример, дошёл до такого:
a. ssl_ciphers AES128-SHA;
TLSv1 работает
b. ssl_ciphers AES128-SHA:ECDHE-ECDSA-AES128-SHA;
TLSv1 работает
c. ssl_ciphers ECDHE-ECDSA-AES128-SHA:AES128-SHA;
TLSv1 НЕ работает
d. ssl_ciphers ECDHE-ECDSA-AES128-SHA256:AES128-SHA;
TLSv1 работает
e. ssl_ciphers ECDHE-ECDSA-AES128-SHA:AES128-SHA:@SECLEVEL=0;
TLSv1 работает
:@SECLEVEL=0 прописать недолго, тем более, что, если я ничего не путаю, с переходом на openssl3 так и так придётся это делать; но неконсистентность поведения удивила.
это вообще баг или фича? )
за десять минут просмотра кода нжинкса возникло ощущение, что дело не в нём, а так срабатывают какие-то эвристики в openssl.
код openssl пока не смотрел.