8

У меня есть веб-сервер Apache 2.4.7, работающий с несколькими доменными именами с использованием одного IP-адреса. В результате уязвимости Poodle я добавил следующую строку SSLCipherSuite . Некоторое время он работал нормально, но пользователи сообщают о проблемах с доступом к странице в Firefox. Просить пользователей о переключении браузеров, к сожалению, не вариант, поэтому мне нужно изменить настройки для поддержки TLS 1.0, 1.1 и 1.2.

Текущие настройки:

<VirtualHost ZYX.XYZ.org:443>
DocumentRoot /var/www/ZYX.XYZ/www
ServerName ZYX.XYZ.org

<Directory "/var/www/ZYX.XYZ/">
  allow from all
  Options -Indexes
</Directory>

SSLEngine on
SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:-LOW:-SSLv2:-SSLv3:-EXP:!kEDH
SSLCertificateFile /etc/apache2/ssl/XYZ.org.crt
SSLCertificateKeyFile /etc/apache2/ssl/XYZ.org.key
SSLCACertificateFile /etc/apache2/ssl/gd_bundle-g2-g1.crt
</VirtualHost>

Если мы посмотрим на тест Qualys, то увидим, что сервер поддерживает только TLS 1.2.

Какими будут соответствующие настройки для включения TLS 1.0, TLS 1.1 и TLS 1.2, чтобы сайт мог поддерживать старые браузеры, а также поддерживать достойный уровень безопасности?

4 ответа4

10

Следующая конфигурация является (или использовалась) лучшей конфигурацией в соответствии с SSLLabs:

SSLProtocol +TLSv1.2 +TLSv1.1 +TLSv1
SSLCompression off
SSLHonorCipherOrder on
SSLCipherSuite "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA"

Однако он исключит все более старые браузеры (включая Opera Mini!), Поскольку в нем отсутствуют наборы шифров, отличные от PFS и RC4. Вы можете добавить следующее (перед закрывающей кавычкой, конечно), чтобы включить RC4, включая запасной вариант (последняя запись) к RC4 без PFS:

:ECDHE-ECDSA-RC4-SHA:ECDHE-RSA-RC4-SHA:ECDH-ECDSA-RC4-SHA:ECDH-RSA-RC4-SHA:RC4-SHA

Вы должны поощрять пользователей обновлять как можно скорее. RC4 сломан и больше не должен использоваться, особенно без PFS.

Чтобы добиться лучших оценок, также отправьте заголовок HSTS (чтобы это работало, вам нужно включить mod_header):

Header always set Strict-Transport-Security "max-age=63072000;"

Эта конфигурация не будет работать для Apache <2.2.26, потому что она не поддерживает криптографию с эллиптической кривой.

Обновление:
Только что проверил, все еще хорошо для A+. :) Я считаю, что для этого требуется сертификат с SHA256.

Обновление октябрь 2015:
Недавно я нашел другой генератор для конфигураций SSL, предоставленный Mozilla. Он заказывает шифры, чтобы Chrome не говорил, что вы используете устаревший набор шифров.

3

Я нашел эту рекомендацию на Cipherli.st:

SSLCipherSuite AES128+EECDH:AES128+EDH
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder On
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
# Requires Apache >= 2.4
SSLCompression off 
SSLUseStapling on 
SSLStaplingCache "shmcb:logs/stapling-cache(150000)" 
3
 SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:-LOW:-SSLv2:-SSLv3:-EXP:!kEDH
                                                           ^^^^^^^^

Отключение наборов шифров SSLv3 отключает все наборы шифров, представленные в SSL3.0. Поскольку эти наборы шифров также используются с более поздними версиями SSL (TLS1.0+), а новые наборы шифров были в основном представлены с TLS1.2, этот параметр делает TLS1.0 и TLS1.1 недоступными из-за отсутствия общих шифров. Таким образом, протокол эффективно ограничен TLS1.2.

Если бы вы вызывали openssl ciphers -V <cipher> со своей строкой шифра, вы бы увидели, что для всех доступных шифров требуется TLS1.2.

Например: openssl ciphers -V TLSv1.2 .

1

См. Директиву SSLOpenSSLConfCmd в конфигурации Apache 2.4.

SSLOpenSSLConfCmd Protocol "-ALL, TLSv1.2"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .