Re: Выбор версии TLS в proxy_ssl_protocols
Hello! On Fri, Nov 16, 2018 at 03:33:41PM +0300, Evgeniy Berdnikov wrote: > On Fri, Nov 16, 2018 at 02:23:52PM +0300, Maxim Dounin wrote: > > Проблема в том, что в Debian на системном уровне запрещены > > протоколы меньше TLS 1.2. Соответственно в вашей конфигурации > > оказываются запрещены вообще все протоколы - об этом и говорит > > ошибка "no protocols available". > > Действительно, изменение MinProtocol в системном конфиге openssl > решает проблему. Спасибо. > > > Исправить это можно, обновившись на nginx 1.15.3+, где > > соответствующая проблема полечена на уровне nginx[1], либо же > > убрав ограничение в системном конфиге OpenSSL и/или задав для > > nginx'а отдельный конфиг, без соответствующего ограничения. > > Каким образом можно задать для nginx отдельный конфиг > без системного ограничения на версии TLS? Конфиг для openssl, отличный от используемого по умолчанию, можно задать с помощью переменной окружения OPENSSL_CONF. > Предлагаю описание директив ssl_protocols и proxy_ssl_protocols > дополнить словами о том, что версия может быть ограничена в > системном конфиге openssl вплоть до некоторых версий nginx. > Хотя бы на сайте (в дистрибутивах с младшими версиями nginx > менять документацию уже поздно). Как я уже писал ранее, начиная с версии 1.15.3 nginx умеет бороться с попытками ограничить протоколы через конфиг OpenSSL'я, а равно с аналогичными ограничениями, заданными на уровне библиотеки. -- Maxim Dounin http://mdounin.ru/ ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Выбор версии TLS в proxy_ssl_protocols
Добрый день. On Fri, Nov 16, 2018 at 02:23:52PM +0300, Maxim Dounin wrote: > Проблема в том, что в Debian на системном уровне запрещены > протоколы меньше TLS 1.2. Соответственно в вашей конфигурации > оказываются запрещены вообще все протоколы - об этом и говорит > ошибка "no protocols available". Действительно, изменение MinProtocol в системном конфиге openssl решает проблему. Спасибо. > Исправить это можно, обновившись на nginx 1.15.3+, где > соответствующая проблема полечена на уровне nginx[1], либо же > убрав ограничение в системном конфиге OpenSSL и/или задав для > nginx'а отдельный конфиг, без соответствующего ограничения. Каким образом можно задать для nginx отдельный конфиг без системного ограничения на версии TLS? Предлагаю описание директив ssl_protocols и proxy_ssl_protocols дополнить словами о том, что версия может быть ограничена в системном конфиге openssl вплоть до некоторых версий nginx. Хотя бы на сайте (в дистрибутивах с младшими версиями nginx менять документацию уже поздно). -- Eugene Berdnikov ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Выбор версии TLS в proxy_ssl_protocols
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 mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Выбор версии TLS в proxy_ssl_protocols
Коллеги, добрый вечер. Есть задача спроксировать соединение до сервера с Exchange 2013, который не умеет TLSv1.2 и выше -- он просто обрывает соединение. Это выяснено с помощью "openssl s_client" перебором ключей -tlsXXX. Openssl с ключами -tls1 и -tls1_1 соединение устанавливает. Смотрим то же самое на nginx, для начала TLSv1.2. Конфиг стенда: server { listen *:8080 ; server_name cio.protva.ru ; location /owa/ { proxy_pass https://172.23.0.4/owa/ ; proxy_ssl_protocols TLSv1.2 ; ... } } Запрос принимается, nginx отсылает эксчейнджу нормальный пакет ClientHello (это подтверждается анализатором трафика, виден список шифров и прочие потроха), эксчейндж тупо рвёт коннекцию, в лог пишется: 2018/11/15 21:47:35 [error] 12393#12393: *1 peer closed connection in SSL handshake (104: Connection reset by peer) 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" Здесь всё нормально и совпадает с результатом "openssl s_client -tls1_2". Теперь понижаем версию, чтобы получить желаемый коннект: прописываем в конфиге "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" при этом по сети эксчейнджу летит такой пакет: Internet Protocol Version 4, Src: 192.168.30.31, Dst: 172.23.0.4 Transmission Control Protocol, Src Port: 33938, Dst Port: 443, Seq: 1, Ack: 1, Len: 7 Secure Sockets Layer TLSv1 Record Layer: Alert (Level: Fatal, Description: Internal Error) Content Type: Alert (21) Version: TLS 1.0 (0x0301) Length: 2 Alert Message Level: Fatal (2) Description: Internal Error (80) То есть вместо изменения версии происходит какая-то внутренняя ошибка "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. # nginx -V nginx version: nginx/1.14.1 built with OpenSSL 1.1.1 11 Sep 2018 TLS SNI support enabled configure arguments: --with-cc-opt='-g -O2 -fdebug-prefix-map=/build/nginx-AZYb5D/nginx-1.14.1=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -fPIC' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_gzip_static_module --without-http_browser_module --without-http_geo_module --without-http_limit_req_module --without-http_limit_conn_module --without-http_memcached_module --without-http_referer_module --without-http_split_clients_module --without-http_userid_module --add-dynamic-module=/build/nginx-AZYb5D/nginx-1.14.1/debian/modules/http-echo PS. Пытался прописывать proxy_ssl_name, но шаманство не помогло, конечно. -- Eugene Berdnikov ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru