Re: Выбор версии TLS в proxy_ssl_protocols
Maxim Dounin
mdounin на mdounin.ru
Пт Ноя 16 11:23:52 UTC 2018
Hello!
On Thu, Nov 15, 2018 at 10:50:15PM +0300, Evgeniy Berdnikov wrote:
> Есть задача спроксировать соединение до сервера с Exchange 2013,
> который не умеет TLSv1.2 и выше -- он просто обрывает соединение.
> Это выяснено с помощью "openssl s_client" перебором ключей -tlsXXX.
> Openssl с ключами -tls1 и -tls1_1 соединение устанавливает.
[...]
> Теперь понижаем версию, чтобы получить желаемый коннект: прописываем
> в конфиге "TLSv1.1" и получаем в логе
>
> 2018/11/15 21:50:25 [crit] 12454#12454: *1 SSL_do_handshake() failed (SSL: error:141E70BF:SSL routines:tls_construct_client_hello:no protocols available) while SSL handshaking to upstream, client: 192.168.27.13, server: cio.protva.ru, request: "GET /owa/ HTTP/1.1", upstream: "https://172.23.0.4:443/owa/", host: "cio.protva.ru:8080"
[...]
> То есть вместо изменения версии происходит какая-то внутренняя ошибка
> "tls_construct_client_hello:no protocols available". Такой же результат
> получается если указать TLSv1, SSLv3 или несколько версий протокола.
> Это бага или я что-то упустил?
>
> Информация о стендовой системе: Debian/unstable (32bit), пакеты
> nginx-light_1.14.1-1_i386 и libssl_1.1.1-2_i386.
Проблема в том, что в Debian на системном уровне запрещены
протоколы меньше TLS 1.2. Соответственно в вашей конфигурации
оказываются запрещены вообще все протоколы - об этом и говорит
ошибка "no protocols available".
Исправить это можно, обновившись на nginx 1.15.3+, где
соответствующая проблема полечена на уровне nginx[1], либо же
убрав ограничение в системном конфиге OpenSSL и/или задав для
nginx'а отдельный конфиг, без соответствующего ограничения.
[1] http://hg.nginx.org/nginx/rev/7ad0f4ace359
--
Maxim Dounin
http://mdounin.ru/
Подробная информация о списке рассылки nginx-ru