Як за промовчанням в Apache вмикати ідеальну таємницю вперед?

Warning: please only use the recommendations for Apache configuration from the answers below. For which cipher(s) to use - security norms change over time and some of the security advice below is already out of date.

Після останніх подій я переглядав налаштування Apache. Наразі конфігурація веб-сайту apache виглядає приблизно так:

 
    
            ServerName example.com
            ServerAlias www.example.com
            Redirect permanent/https://example.com
    

    
            ServerAdmin [email protected]
            ServerName example.com

            DocumentRoot /var/www-wordpress
            
                    Options FollowSymLinks
                    AllowOverride None
            
            
                    Options Indexes FollowSymLinks MultiViews
                    AllowOverride FileInfo
                    Order allow,deny
                    allow from all
            

            ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
            
                    AllowOverride None
                    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                    Order allow,deny
                    Allow from all
            

            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
            
                    SSLOptions +StdEnvVars
            
            
                    SSLOptions +StdEnvVars
            

            BrowserMatch "MSIE [2-6]" \
                    nokeepalive ssl-unclean-shutdown \
                    downgrade-1.0 force-response-1.0
            BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
    

Що я повинен зробити, щоб підтримати ідеальну таємницю вперед? Як за замовчуванням можна ввімкнути досконалу таємницю для SSL? Як я можу це забезпечити?

65
Stack Overflow - це сайт для питань програмування та розробки. Це питання, здається, не є тематичним, оскільки не йдеться про програмування чи розвиток. Див. Які теми можна отримати тут у довідковому центрі. Можливо, Обмін стеками веб-програм > або Unix & Linux Stack Exchange буде кращим місцем для запиту.
додано Автор jww, джерело
Зверніть увагу на те, як «у світлі останніх подій» завжди актуально.
додано Автор Mikulas Dite, джерело
Обмін ключами DHE та ECDH забезпечують ідеальну таємницю вперед. DHE підтримується практично всіма браузерами, тоді як ECDH вимагає принаймні TLSv1.1 і досить сучасний браузер. Проте, ключові обміни DHE становлять приблизно три часи повільніше, ніж звичайні ключові обміни ключами RSA.
додано Автор ntoskrnl, джерело
+1. Я думаю, що важко отримати гарну конфігурацію, тому що SSLv3/TLS v1 є вразливими до BEAST, а це означає, що слід вибрати слабкий RC4 над будь-якими шифрами на основі CBC, як AES. При використанні TLS v1.1 або v1.2, OTOH, краще використовувати більш сильний шифр, як AES. AFAIK, Apache не дозволяє вам умовно вибирати шифри на основі версії протоколу. Підтримка браузера TLS v1.1 + все ще залишається слабкою (Firefox ще не має). все враховується.
додано Автор Lorrin, джерело

8 Відповіді

Як на рахунок:

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, потім без), і, нарешті, опція AES, яка є вразливою до BEAST. Виключення без шифрування аутентифікації/слабкого шифрування/слабкого хешування в кінці призначено лише для гарної гігієни і може бути опущено, оскільки таких шифрів не було введено. Якщо продуктивність викликає занепокоєння, використовуйте тільки 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 згадані в Wikipedia .

Також перед тим, як я говорив про CRIME і BREACH . Для захисту від CRIME відключіть стиснення SSL. Це включено в приклади, пов'язані між собою. Щоб захиститися від BREACH, потрібно вимкнути стиснення на рівні HTTP. Для Apache 2.4 просто зробіть це один раз у всьому світі:


  SetEnvIfExpr "%{HTTPS} == 'on'" no-gzip

Для старих версій Apache помістіть це в кожному вікні VirtualHost, де знаходиться SSLEngine:


    SetEnv no-gzip

Update 2014-10-14: The Mozilla OpSec guide is now split into recommendations for old/intermediate/modern compatibility. With the settings from intermediate or modern, you end up with SSLv3 disabled. That will protect against the POODLE attack.

92
додано
Два питання Лоррін. Чому б не SSLProtocol всі -SSLv2 -SSLv3 ? А чому б не AESGCM ? TLS1.0 має майже 100% -ве прийняття ( Захист транспортного рівня ).
додано Автор jww, джерело
Завдяки Lorrin, останнє питання. Хіба ми не хочемо, щоб AESGCM спочатку гарантував, щоб він допоміг забезпечити свого користувача, скажімо, AEC-CBC? Наприклад, EECDH + AESGCM: EECDH + AES: ... .
додано Автор jww, джерело
Мій ssl клас знижений з А до B, коли я додав цей параметр до мого сервера Apache 2.4.16, тому що він підтримує RC4, який є слабким. Мені довелося відновити налаштування, щоб поліпшити рейтинг ssl для мого домену. Ви можете надати своєму домену спробувати цей інструмент онлайн. ssllabs.com/ssltest/analyze.html
додано Автор SenG, джерело
Привіт noloader, хороші питання. Додавання -SSLv3 - прекрасна ідея. Я не знаю про будь-яку специфічну уразливість, яка б захистила вас, але лабораторії Qualys SSL надають вам трохи вищий рівень протоколу, якщо ви вимкнете SSLv3. (І вони знають про це набагато більше, ніж я!) AESGCM є надлишковим: термін, як EECDH + AES , дозволяє будь-що з обміну ключами EECDH і шифром AES, і включає варіанти з і без Galois/Counter Mode (GCM). Ви можете перевірити це для себе в командному рядку: шифри openssl -v 'EECDH + AES: ... <�залишок рядка шифру>' буде включати варіанти GCM.
додано Автор Lorrin, джерело
Якщо ви знаєте, що ви віддаєте перевагу GCM, то, так, має сенс явно перерахувати його першим. Я вважаю, що ви не вказуєте і не відкладаєте значення за замовчуванням у методі openssl.
додано Автор Lorrin, джерело

From my own understanding, you need to activate SSLHonorCipherOrder and to prepend SSLCipherSuite with ECDHE and DHE ciphers from 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

To test your website, you can use: https://www.ssllabs.com/ssltest

Примітка. Еліптична крива DHE, здається, працює тільки з Apache 2.3.3 або вище (див. джерело і коментар Бруно).

6
додано
Номери не-EC DHE-шифрів прекрасно працюють з Apache Httpd 2.2 (і можливо нижчими версіями).
додано Автор 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/analysis.html ?

3
додано

Набори шифрів, які надають Perfect Forward Secrecy, є тими, які використовують ефемерну форму обміну ключами Діффі-Хеллмана. Їх недоліком є ​​їх накладні витрати, які можна покращити за допомогою еліптичних варіантів кривої (див. = "nofollow"> блог Вінсент Бернат .)

Набори шифрів в Apache Httpd (за умови, що ви використовуєте mod_ssl , скомпільовані з OpenSSL) налаштовуються за допомогою SSLCipherSuite , який приймає список, як ви б бачили при використанні шифри openssl . Якщо ви подивитеся на сторінку man OpenSSL , ви знайдете kEDH - це те, що ви шукаєте. (Можна також перелічити окремі пакунки шифру.)

2
додано

Have a look at https://cipherli.st

There you find copy & paste config snippets for several services, that should ensure strong ssl security settings.

2
додано

Спробуйте цей код у вашому 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.

2
додано

This article will help you configure forward security and get you up to date on current standards - https://community.qualys.com/blogs/securitylabs/2013/08/05/configuring-apache-nginx-and-openssl-for-forward-secrecy

Станом на 09/16/2015, це допоможе вам отримати результати тесту 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
2
додано

Я отримав оцінку 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 Шифр також допускається для сумісності. Перші, кращі дві шифри використовують Еліптична крива Діффі-Хеллмана , останній додано як резервний, оскільки це хороший варіант серед доступних шифрів XP/IE . Якщо ви встановили останню версію OpenSSL, доступну для цього суміші достатньо, щоб отримати A на момент написання.

Сподіваюся, що це корисно.

0
додано