У меня есть NGINX, действующий в качестве обратного прокси-сервера для наших сайтов, и он работает очень хорошо. Для сайтов, которые нуждаются в ssl, я следовал за raymii.org, чтобы удостовериться, что набрал максимально возможную оценку SSLLabs Один из сайтов должен быть совместимым с PCI DSS, но на основе последнего сканирования TrustWave теперь происходит сбой из-за включения TLS 1.0.
На уровне http в nginx.conf у меня есть:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
Для конкретного сервера у меня есть:
ssl_protocols TLSv1.1 TLSv1.2;
Я изменил шифры, переместил вещи с уровня http на каждый сервер сайта ssl, но независимо от того, что когда я запускаю:
openssl s_client -connect www.example.com:443 -tls1
Я получаю действительное соединение для TLS 1.0. SSLLabs помещает настройку nginx для сайта как A, но с TLS 1.0, так что я считаю, что остальные настройки верны, просто не отключит TLS 1.0.
Мысли о том, что я мог упустить?
openssl version -a
OpenSSL 1.0.1f 6 Jan 2014
built on: Thu Jun 11 15:28:12 UTC 2015
platform: debian-amd64
nginx -v
nginx version: nginx/1.8.0
Ответы:
Проблема здесь в том, что
Server name indication
часть согласования TLS выполняется после того, как само соединение было согласовано. И протокол согласовывается во время согласования соединения.Возможно, будет возможно применить TLS v1.0 для этого виртуального хоста, если вы сконфигурируете этот виртуальный хост на IP-адрес на сервере, с которым не связаны другие виртуальные хосты. Поэтому nginx будет знать, основываясь на IP-адресе, что TLS v 1.0 не разрешен.
источник
Server Name Indication
является частью TLSClientHello
. Оно находится в первом сообщении, отправленном клиентом, а не согласовано позже. Больше похоже на то, что у Nginx есть недостаток дизайна. Похоже, он принимает соединение, а затем перенаправляет его на виртуальный хост, независимо от того, правильно он или нет. Вместо этого nginx должен проанализировать имя сервера, обратиться к виртуальному хосту, а затем отклонить соединение, если оно не соответствует требованиям виртуального хоста. Недостаток дизайна, вероятно, достоин CVE, поскольку TLS 1.0 иногда вызывает сомнения. Это явно нарушение C & A в некоторых обстоятельствах.Найдите серверный блок, который вы хотите использовать в качестве шаблона согласования ssl «по умолчанию». Найдите свою линию прослушивания
и добавить
default_server
в конец строкиЭто позволяет nginx иметь конфигурацию при согласовании используемой версии TLS. Недостатком является то, что вы можете иметь только один сервер по умолчанию на порт. Таким образом, запуск некоторых виртуальных доменов с включенным TLSv1 и отключенных других невозможен.
источник
Я отключил TLSv1 на nginx версии 1.8.1. Вам необходимо обновить openssl до версии 1.0.1g или 1.0.1h. Затем просто удалите 'TLSv1' из директивы ssl_protocols:
Затем проверьте соединение через TLSv1 командой:
Вы должны получить что-то вроде этого:
источник