Предупреждение: используйте только рекомендации для конфигурации 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 webmaster@localhost
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 по умолчанию? Как я могу обеспечить его соблюдение?
Как насчет:
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.
SSLProtocol all -SSLv2 -SSLv3
? А почему не AESGCM
? TLS1.0, кажется, имеет почти 100% -ное принятие ( безопасность транспортного уровня ).
-SSLv3
- хорошая идея. Я не знаю какой-либо конкретной уязвимости, от которой можно было бы защититься, но лаборатории Qualys SSL дают вам немного более высокий балл протокола, если вы отключите SSLv3. (И они знают об этом гораздо больше, чем я!) AESGCM
является избыточным: термин, подобный EECDH+AES
что-либо с обменом ключами EECDH и шифром AES, а также варианты с режимом Galois / Counter и без него (GCM). Вы можете убедиться в этом сами в командной строке: openssl ciphers -v 'EECDH+AES:...<rest of cipher suite string>'
будет включать варианты GCM.
Из моего собственного понимания вам нужно активировать 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).
Введите этот код шифрования в свой 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?
Эта статья поможет вам настроить передовую безопасность и обновить текущие стандарты - 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
Посмотрите https://cipherli.st
Здесь вы найдете фрагменты конфигурации копирования и вставки для нескольких служб, которые должны обеспечить сильные параметры безопасности ssl.
Попробуйте использовать этот код в 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.
Набор шифров, которые обеспечивают Perfect Forward Secrecy, - это те, которые используют эфемерную форму обмена ключами Диффи-Хеллмана. Их недостатком является их накладные расходы, которые могут быть улучшены за счет использования вариантов эллиптической кривой (см. Vincent Bernat blog.)
Набор шифров в Apache Httpd (если вы используете mod_ssl
, скомпилированный с помощью OpenSSL), настраивается с помощью SSLCipherSuite
, который принимает список, который вы увидите при использовании команды openssl ciphers
. Если вы посмотрите на справочную страницу OpenSSL, вы найдете kEDH
то, что вы ищете. (Вы также можете перечислить индивидуальные списки шифров.)
Я получил оценку 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 на момент написания.
Надеюсь, что это будет полезно.