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/

Другие вопросы по тегам