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

Как отключить TLS 1.0 и 1.1 в apache?

Кто-нибудь знает, почему я не могу отключить tls 1.0 и tls1.1, обновив конфигурацию до этого.

SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 

После этого я перезагружаю apache. Я выполняю ssl-сканирование с помощью ssllabs или comodo ssl tool, и он по-прежнему говорит, что tls 1.1 и 1.0 поддерживаются. Я бы хотел их удалить?

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

Так что проверьте свой основной httpd.conf (и все включенные фрагменты, например, conf.d/*.conf и аналогичные включает) для большего количества вхождений SSLProtocol директива.

Ваш синтаксис правильный, хотя я согласен с Эзра-с 'ответ что, когда вы расширяете all сокращенно, вы можете немного улучшить:

 SSLProtocol +SSLv3 +TLSv1 +TLSv1.1 +TLSv1.2 -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 

просто используя:

 SSLProtocol TLSv1.2

того, что вы указали, достаточно, он не должен отображать никаких других протоколов. Помните, что SSLLABS кеширует последние тесты. Хотя знание того, что нет других протоколов, определяющих его так, как вы, является намеренно запутанным.

В любом случае вы можете использовать это или просто:

SSLProtocol TLSv1.2

Отключите версию TLS1.0 в Apache.

Если у вас несколько виртуальных хостингов, вам необходимо обновить все файлы конфигурации, в противном случае достаточно ssl.conf.

Чтобы проверить версию, поддерживающую TSL:

# nmap --script ssl-enum-ciphers -p 443 192.168.11.10 | grep TLSv
|   TLSv1.0:
|   TLSv1.1:
|   TLSv1.2:

Измените файл конфигурации Apache vi /etc/httpd/conf.d/web.conf удалить весь TLS и разрешить только TLS1.2.

SSLProtocol TLSv1.2

Подтвердите после модификации.

# grep SSLProtocol /etc/httpd/conf.d/web.conf
SSLProtocol TLSv1.2

# nmap --script ssl-enum-ciphers -p 443 192.168.11.10 | grep TLSv
|   TLSv1.2:
# service httpd restart

Я тоже боролся с этой проблемой, изменяя конфигурации с помощью SSLProtocol директива не работала. В итоге я добавил в конфигурацию своего виртуального хоста следующее:

SSLOpenSSLConfCmd Protocol "-ALL, TLSv1.2"

Что сработало отлично. Вы можете узнать больше о SSLOpenSSLConfCmd директива Вот.

Я тоже столкнулся с этой проблемой. Я не мог отключить TLSv1 или TLSv1.1 только для одного VHost, настроив его в этом Vhost.

Мы нашли два решения:

1 -

Поскольку мы запускаем несколько IP-адресов в одном экземпляре, я отключил TLSv1 и TLSv1.1 для каждого IP-адреса, а также для определенных Vhosts.

2 -

Когда мы настраиваем только надежные шифры, то кажется, что доступен только TLSv1.2.

  SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1

  SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256
  SSLHonorCipherOrder on

Apache 2.4.23, openssl 1.0.2.

Может кто-нибудь сможет проверить мои наблюдения.

Здесь много хороших ответов, но они не сработали для меня или были просто излишними. Следующие предложения были протестированы на Ubuntu 16.04 Apache 2.

Ключевое наблюдение заключается в том, что первый виртуальный хост на этом порту определяет настройку ... даже если в его конфигурации явно не указано значение SSLProtocol.

Чтобы определить первый виртуальный хост:

bash
source /etc/apache2/envvars
apache2 -t -D DUMP_VHOSTS
exit

В CentOS, вероятно, понадобится всего одна строчка:

httpd -t -D DUMP_VHOSTS

Когда вы это сделаете, вы должны увидеть список виртуальных хостов, который может включать в себя раздел 443, например

*:443                  is a NameVirtualHost
     default server example.com (/etc/apache2/sites-enabled/example.com-le-ssl.conf:2)
     port 443 namevhost sample.com (/etc/apache2/sites-enabled/sample.com-le-ssl.conf:2)
     port 443 namevhost another.org (/etc/apache2/sites-enabled/another.org-le-ssl.conf:2)
     port 443 namevhost lucky.com (/etc/apache2/sites-enabled/lucky.com-le-ssl.conf:2)
             alias test15a.zzzzpost.com

Когда вы это увидите, вы можете обнаружить, что достаточно обновить конфигурацию SSLProtocol только для этого виртуального хоста "сервера по умолчанию".

Еще одна сложность, с которой вы можете столкнуться с более ранними предложениями, заключается в том, что если вы введете grep для вхождений SSLProtocol в вашем / etc / apache2 / или / etc / httpd / tree, вы не найдете конфигурации в других частях вашей файловой системы. Это может быть важно, если в вашей конфигурации есть директивы Include. Например, если вы использовали установщик Let's Encrypt, он часто добавляет следующее:

<IfModule mod_ssl.c> 
<VirtualHost *:443>  
    ServerName mydomain.com
    ...
    Include /etc/letsencrypt/options-ssl-apache.conf 
    ...
</VirtualHost>  

Итак, мои предложения:

1. Determine the first virtual host on the given port.  See my example above 
   for details.
2. Inspect the configuration for that virtual host carefully.    
   a. If you find that config file explicitly sets SSLProtocol, make your change there.
   b. If not, but you find it includes a config file that is setting SSLProtocol, 
      consider setting it there.
   c. Otherwise, it's likely that setting it in your ssl.conf file would work.
   d. If not, consider creating your own config file with your SSLProtocol setting
      and including it in this first virtual host config, and possibly all virtual 
      host configs.

Как уже упоминалось другими, вам нужна конфигурация

SSLProtocol             TLSv1.2

После внесения изменений вы можете быстро подтвердить его с помощью:

systemctl reload apache2    
# This ^^^ must be done before vvvv
nmap --script ssl-enum-ciphers -p 443 sample.com | grep TLSv

Если вы добились успеха, здесь перечислены только TLSv1.2.

Таким образом вы можете включить TLS 1.2 и 1.3 и отключить все устаревшие функции.

  SSLProtocol +TLSv1.2 +TLSv1.3
  SSLCipherSuite HIGH:!kRSA:!ADH:!eNULL:!LOW:!EXP:!MD5:!3DES

Вам необходимо перезапустить службу Apache, используя следующую команду, чтобы отразить изменения.

sudo service apache2 restart

Код ниже подойдет мне, вы можете проверить эту статью, чтобы получить более подробную информацию, https://karthikekblog.com/how-to-disable-enable-ssl-tls-protocols-in-ubentu-apache-linux-server/

<VirtualHost *:443>
ServerName www.yourdomain.com
DocumentRoot /var/www/html
SSLEngine on
SSLProtocol +TLSv1.2
SSLCertificateFile /etc/apache2/certificates/certificate.crt
SSLCertificateKeyFile /etc/apache2/certificates/certificate.key 
SSLCertificateChainFile /etc/apache2/certificates/intermediate.crt
</VirtualHost>