TLSv1 не выключается в Apache
Как лучше всего увидеть, где мои SSLProtocols могут быть переопределены на сервере CentOS 7? Apache 2.4.6 (понимая, что он довольно старый, поэтому мне придется обновить это в нерабочее время и посмотреть, решит ли он проблему).
Я пытаюсь отключить TLSv1, используя эту директиву Apache в моем корне конфигурации (/etc/httpd/conf/httpd.conf)
SSLProtocol -all +TLSv1.1 +TLSv1.2
Тем не менее, когда я бегу либо nmap --script ssl-enum-ciphers -p 443 <mysite.com>
Это показывает, что TLSv1 все еще включен:
ssl-enum-ciphers:
| TLSv1.0:
| ciphers:
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A
| compressors:
| NULL
| cipher preference: server
Тест SSL Labs показывает то же самое.
Нет другого SSLProtocol
директивы предоставляются в виртуальном хосте.
После этого я решил просто искать все файлы конфигурации с помощью этой команды sudo grep -rnw '/etc/httpd' -e 'SSLProtocol'
и это выявило следующие места:
/etc/httpd/conf/httpd.conf:359:SSLProtocol -all +TLSv1.1 +TLSv1.2
/etc/httpd/conf.d/ssl.conf:74:SSLProtocol ALL -SSLv2 -SSLv3
/etc/httpd/conf.d/ssl.conf:227:SSLProtocol ALL -SSLv2 -SSLv3
/etc/httpd/conf.d/ssl.conf:257:SSLProtocol ALL -SSLv2 -SSLv3
/etc/httpd/conf.d/ssl.conf.rpmnew:75:SSLProtocol all -SSLv2 -SSLv3
Таким образом, я вошел в файл ssl.conf и изменил строку 74, чтобы соответствовать, проблема все еще сохраняется. Строки 227 и 257 предназначены для двух виртуальных хостов, которые я сейчас не тестирую, но обновлю позже.
РЕДАКТИРОВАТЬ: Несмотря на то, что две оставшиеся строки были для виртуальных хостов, предоставили ответы об ошибке OpenSSL, я изменил все ссылки на SSLProtocol -all +TLSv1.1 +TLSv1.2
и перезапустил мой сервер, но ничего не изменилось. С чего бы это? Мне интересно, если это ошибка в самом Apache 2.4.6.
5 ответов
Мне удалось решить это, и это было определенно неожиданное решение. Тот факт, что виртуальные хосты наследуют настройки своих братьев и сестер, на мой взгляд, является плохим решением. Тем более что глобальные настройки файлов не имеют приоритета. Я нашел эту проблему на Bugzilla и проходил через нее, когда позже кто-то упомянул, что Let's Encrypt имеет изолированный файл /etc/letsencrypt/options-ssl-apache.conf
в этом файле есть настройка:
SSLProtocol all -SSLv2 -SSLv3
Certbot автоматически устанавливает ссылку на этот файл в конфигурации виртуального хоста, и этот сертификат был установлен на первом виртуальном хосте в конфигурации моего сервера. Я изменил его, чтобы соответствовать моей предыдущей настройке SSLProtocol -all +TLSv1.1 +TLSv1.2
и это сработало отлично.
С помощью
SSLProtocol TLSv1.2
Или же
SSLProtocol -ALL +TLSv1.2
Должно сработать. Но (всегда есть но!) Не работает его настройка в виртуальных хостах. Используя virtualhosts, он сохраняет первую опцию vhost для всех последующих vhosts.
По крайней мере, это происходит в CentOS 7.6 с Apache (httpd) 2.4.6.
Удалить (или закомментировать) каждый SSLProtocol ALL -SSLv2 -SSLv3
линия и изменить их в свой SSLProtocol TLSv1.1 TLSv1.2
, Только отключение этих двух разрешит TLSv1.0.
Не нужно указывать -all, если вы включаете только то, что вам нужно.
Если у вас есть несколько виртуальных хостов TLS и вы используете указание имени сервера (SNI), это разрешенный синтаксис для SSLProtocol
директива для каждого VirtualHost, но если на практике у вас нет IP VirtualHosts, настройки для SSLProtocol
Директивы первого VirtualHost используются для всего сервера и / или всех виртуальных хостов на основе имен, поддерживающих TLS 1.
Что касается меня, то я потратил час, пытаясь понять, почему мой веб-сайт продолжал предлагать TLS 1.0 и TLS 1.1 — даже после ручного редактирования переопределения letencrypt, которое было включено автоматически. Я понял, что использую Cloudflare, и что Cloudflare в 2023 году по-прежнему предлагает TLS 1.0 и TLS 1.1 по умолчанию. Безумие. В любом случае, если кто-то, читающий это, испытывает ту же проблему, вы можете установить минимальную версию TLS в Cloudflare следующим образом (бесплатно): https://developers.cloudflare.com/ssl/edge-certificates/additional-options/minimum -TLS/