Назад | Перейти на главную страницу

TLSv1 не выключается в Apache

Как лучше всего узнать, где мои протоколы SSL могут быть переопределены на сервере 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.

Мне удалось решить эту проблему, и это определенно было неожиданное исправление. На мой взгляд, тот факт, что виртуальные хосты наследуют настройки своих братьев и сестер, является плохим решением. Тем более, что глобальные настройки файлов не имеют приоритета. я нашел Эта проблема на 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

Должно сработать. Но (всегда есть но!) Он не работает, настраивая его в виртуальных хостах. Используя виртуальные хосты, он сохраняет первый вариант виртуального хоста для всех последующих виртуальных хостов.

По крайней мере, это происходит в CentOS 7.6 с Apache (httpd) 2.4.6.

Если у вас есть несколько виртуальных хостов TLS и вы используете указание имени сервера (SNI), разрешенным синтаксисом является наличие SSLProtocol директива для каждого VirtualHost, но если у вас нет IP VirtualHosts на практике, настройки для SSLProtocol директивы из первого VirtualHost используются для всего сервера и / или все VirtualHosts на основе имен с поддержкой TLS1.

Удалять (или закомментировать) каждые SSLProtocol ALL -SSLv2 -SSLv3 линии и измените их на свой SSLProtocol TLSv1.1 TLSv1.2. Только отключение этих двух по-прежнему позволит TLSv1.0.

Не нужно указывать -all, если вы включаете только то, что вам нужно.