Как включить абсолютную секретность по умолчанию по умолчанию на Apache?
Предупреждение: используйте только рекомендации для конфигурации Apache из приведенных ниже ответов. Для чего используется шифр - нормы безопасности меняются со временем, а некоторые из приведенных ниже рекомендаций по безопасности уже устарели.
Вслед за недавними событиями я пересматриваю настройку Apache. В настоящее время мой конфигуратор сайта apache выглядит примерно так:
<IfModule mod_ssl.c>
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect permanent / https://example.com
</VirtualHost>
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName example.com
DocumentRoot /var/www-wordpress
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www-wordpress>
Options Indexes FollowSymLinks MultiViews
AllowOverride FileInfo
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
SSLCertificateFile /etc/ssl/certs/example.com.crt
SSLCertificateKeyFile /etc/ssl/private/example.com.key
SSLCertificateChainFile /etc/ssl/certs/sub.class1.server.ca.pem
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>
Что мне нужно сделать, чтобы поддержать прекрасную секретность? Как включить стандартную конфиденциальность SSL по умолчанию? Как я могу обеспечить его соблюдение?
Ответы
Ответ 1
Как насчет:
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder On
SSLCipherSuite EECDH+AES:EDH+AES:-SHA1:EECDH+RC4:EDH+RC4:RC4-SHA:EECDH+AES256:EDH+AES256:AES256-SHA:!aNULL:!eNULL:!EXP:!LOW:!MD5
Обратите внимание на добавление флага -SSLv3 для отключения SSLv3. Это добавлено для защиты от атаки POODLE.
Это предпочтет совершенную прямую секретность, но не за счет уязвимости для атаки BEAST. Поскольку у Apache не существует способа настройки предпочтений шифрования на основе версии протокола, я подделываю его, ссылаясь на шифры, доступные только в более новых протоколах. В частности, AES был доступен только с хэшированием SHA1 до TLSv1.2. Таким образом, список начинается с эфемерных шифров Diffie-Hellman TLSv1.2, затем RC4 (сначала с эфемерным DH, а затем без) и, наконец, BEES-уязвимый вариант AES. Исключение отсутствия аутентификации/слабого шифрования/слабого хэширования в конце - это просто для хорошей гигиены и может быть опущено, поскольку такие шифры не были введены. Если производительность является проблемой, используйте только EECDH и опустите EDH.
В сочетании с Apache 2.2 (таким образом, нет EECDH, как говорит @Bruno), за https://www.ssllabs.com/ssltest/analyze.html, это обеспечивает только PFS для iOS Safari, IE и Firefox - TLSv1.0, поэтому они получают RC4, чтобы избежать BEAST. (Увы, нет такой вещи, как EDH RC4, поэтому без EECDH вы откажетесь от PFS). Это, я считаю, лучшее, на что можно надеяться, с этими браузерами на Apache 2.2. Chrome является единственным, кто плохо обслуживается, поскольку он поддерживает TLSv1.1 и может использовать EDH AES, не будучи уязвимым для BEAST. Вместо этого он получает RC4-RSA, как Firefox и IE. Обновление Apache для включения EECDH RC4 должно получить PFS для Firefox, IE и Chrome.
Обновление 2013-11-09:
Я нашел несколько альтернативных рекомендаций в Интернете. Они уделяют меньше внимания защите BEAST (возможно, мудрый, BEAST в основном смягчается на стороне клиента сейчас) и больше внимания уделяют безупречной секретности. В разной степени они также имеют более сильные предпочтения для GCM и большее нежелание принимать RC4.
Особо следует отметить следующие рекомендации:
Лично я собираюсь пойти с Mozilla OpSec. Их рассуждения хорошо объяснены на их странице. Следует отметить, что они предпочитают AES128 по сравнению с AES256. По их словам: "[AES128] обеспечивает хорошую защиту, очень быстро и, похоже, более устойчив к атакам с временными атаками".
Примечательно, что в рекомендации Ивана Ристича и Джеффруа Грамайза это означает, что SSLv3 отключен. Я думаю, что это в основном просто ломает IE6, хотя некоторые связанные с безопасностью различия между SSLv3 и TLS v1.0 упомянутые в Википедии.
Также до того, как я не говорил о CRIME и BREACH. Чтобы защитить от CRIME, отключите сжатие SSL. Это включено в приведенные примеры. Для защиты от BREACH вам необходимо отключить сжатие на уровне HTTP. Для Apache 2.4 просто сделайте это один раз в глобальном масштабе:
<Location />
SetEnvIfExpr "%{HTTPS} == 'on'" no-gzip
</Location>
Для более старых версий Apache поместите это в каждый VirtualHost, где включен SSLEngine:
<Location />
SetEnv no-gzip
</Location>
Обновление 2014-10-14:
Руководство Mozilla OpSec теперь разделено на рекомендации по старой/промежуточной/современной совместимости. С настройками от промежуточного или современного вы в итоге отключите SSLv3. Это защитит от атаки POODLE.
Ответ 2
Из моего собственного понимания вам нужно активировать SSLHonorCipherOrder
и добавить SSLCipherSuite
с помощью ECDHE
и DHE
шифров из openssl ciphers -v
Из моего /etc/apache2/mods-available/ssl.conf
:
SSLHonorCipherOrder on
SSLCipherSuite ECDHE-RSA-RC4-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:DHE-RSA-CAMELLIA128-SHA:AES128-SHA:RC4-SHA:HIGH:!aNULL:!MD5:!ADH
Чтобы протестировать ваш сайт, вы можете использовать: https://www.ssllabs.com/ssltest
Примечание: Eliptic Curve DHE работает только с Apache 2.3.3 или выше (см. источник и комментарий Bruno).
Ответ 3
Введите этот код шифрования в свой httpd.conf в директиве main/core conf:
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)"
Вы даже можете проверить состояние безопасности, протестировав его по адресу: https://www.ssllabs.com/ssltest/analyze.html?
Ответ 4
Набор шифров, которые обеспечивают Perfect Forward Secrecy, - это те, которые используют эфемерную форму обмена ключами Диффи-Хеллмана. Их недостатком является их накладные расходы, которые могут быть улучшены за счет использования вариантов эллиптической кривой (см. Vincent Bernat blog.)
Набор шифров в Apache Httpd (если вы используете mod_ssl
, скомпилированный с помощью OpenSSL), настраивается с помощью SSLCipherSuite
, который принимает список, который вы увидите при использовании команды openssl ciphers
. Если вы посмотрите на справочную страницу OpenSSL, вы найдете kEDH
то, что вы ищете. (Вы также можете перечислить индивидуальные списки шифров.)
Ответ 5
Попробуйте использовать этот код в ssl.conf:
SSLProtocol +TLSv1.2 +TLSv1.1 +TLSv1
SSLCompression off
SSLHonorCipherOrder on
SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-RC4-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:RC4-SHA:AES256-GCM-SHA384:AES256-SHA256:CAMELLIA256-SHA:ECDHE-RSA-AES128-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:CAMELLIA128-SHA
Кстати,
Экспертный совет: трюк с разделенной записью (1/n-1) реализован в Firefox через некоторое время. Таким образом, вы можете безопасно отключить RC4 в Firefox в расширенном меню конфигурации. Для этого введите "about: config" в свою адресную строку, затем выполните поиск "rc4" и переключите все найденные значения на "false". Если возникают проблемы с подключением, верните эти параметры в true.
https://cc.dcsec.uni-hannover.de/
Эти веб-сайты предоставляют вам информацию о наборах SSL-шифров, поддерживаемых вашим браузером для защиты соединений HTTPS.
Ответ 6
Посмотрите https://cipherli.st
Здесь вы найдете фрагменты конфигурации копирования и вставки для нескольких служб, которые должны обеспечить сильные параметры безопасности ssl.
Ответ 7
Эта статья поможет вам настроить передовую безопасность и обновить текущие стандарты - https://community.qualys.com/blogs/securitylabs/2013/08/05/configuring-apache-nginx-and-openssl-for-forward-secrecy
По состоянию на 09/16/2015, это даст вам результаты теста A на SSLLabs.
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder On
SSLCipherSuite EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:EDH+aRSA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4
Ответ 8
Я получил оценку A (сентябрь 2016 г.) на SSLLabs, которая по-прежнему поддерживает Windows XP/Internet Explorer 8, используя этот ssl.conf конфигурации на Apache:
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite EECDH+AESGCM:AES256+EECDH:DES-CBC3-SHA
Вкратце: разрешено только TLS: все версии поддерживаются для совместимости, и для совместимости также разрешен шифр DES-CBC3-SHA. Первые предпочтительные два шифра используют Эллиптическая кривая Diffie-Hellman, последняя была добавлена в качестве резервной, потому что это хороший выбор среди доступных шифров XP/IE. Если вы установили последнюю версию OpenSSL, этого микса достаточно, чтобы получить A на момент написания.
Надеюсь, что это будет полезно.