Вимкнення RC4 в наборі шифрів SSL сервера Apache


17

Будь ласка, див. Розділи EDIT у моїй власній відповіді; вони містять пояснення до цієї головоломки .

Я намагаюся відключити RC4 для сервера Apache 2.2.9, який працює на CentOS 6.5 VPS, і я не можу досягти успіху.

Нещодавно придбаний сертифікат, підтверджений бізнесом, встановлено, і SSL-з'єднання працюють нормально, але я хотів налаштувати речі якомога краще, щоб "закріпити безпеку", як це викладено в деяких посібниках.

Перевіряючи конфігурацію з лабораторіями Qualys SSL, сторінка результатів показує "Цей сервер приймає шифр RC4, який є слабким. Ступінь до B

Проте, я поставив це в ssl.conf:

 SSLCipherSuite HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4:!SSLv2:!SSLv3

Я зберегла сценарій, наведений у відповіді це питання у файлі з ім'ям test-ssl-ciphers.sh і змінив IP-адресу на адресу loopback. Це результат ./test-ssl-ciphers.sh | grep -i "RC4":

Testing ECDHE-RSA-RC4-SHA...NO (sslv3 alert handshake failure)
Testing ECDHE-ECDSA-RC4-SHA...NO (sslv3 alert handshake failure)
Testing AECDH-RC4-SHA...NO (sslv3 alert handshake failure)
Testing ADH-RC4-MD5...NO (sslv3 alert handshake failure)
Testing ECDH-RSA-RC4-SHA...NO (sslv3 alert handshake failure)
Testing ECDH-ECDSA-RC4-SHA...NO (sslv3 alert handshake failure)
Testing RC4-SHA...NO (sslv3 alert handshake failure)
Testing RC4-MD5...NO (sslv3 alert handshake failure)
Testing RC4-MD5...NO (sslv3 alert handshake failure)
Testing PSK-RC4-SHA...NO (no ciphers available)
Testing KRB5-RC4-SHA...NO (no ciphers available)
Testing KRB5-RC4-MD5...NO (no ciphers available)
Testing EXP-ADH-RC4-MD5...NO (sslv3 alert handshake failure)
Testing EXP-RC4-MD5...NO (sslv3 alert handshake failure)
Testing EXP-RC4-MD5...NO (sslv3 alert handshake failure)
Testing EXP-KRB5-RC4-SHA...NO (no ciphers available)
Testing EXP-KRB5-RC4-MD5...NO (no ciphers available)

Кожен з цих рядків містить "NO", який, за сценарієм, означає, що сервер не підтримує вказану комбінацію шифру.

Більше того, команда grep -i -r "RC4" /etc/httpd дає мені тільки вищезгаданий файл ssl.conf.

Крім того, працює openssl ciphers -V на моєму шифрі набір не показує RC4 шифрів на всіх, що має сенс з урахуванням конфігурації рядка.

Тому я так чи інакше втратив, чому веб-сайти з перевіркою SSL говорять мені, що "сервер приймає RC4". Вони навіть перераховують наступні шифри, які приймаються:

TLS_RSA_WITH_RC4_128_MD5
TLS_RSA_WITH_RC4_128_SHA
TLS_ECDHE_RSA_WITH_RC4_128_SHA

Чи є у когось можливе пояснення? Що я роблю щось неправильно? Можливо, є інше місце, де цю підтримку RC4 або "прийняття" буде налаштований?

Дякую.

[ EDIT ] Використовуючи CentOS 6.6 у віртуальній машині вдома, я знову запустив скрипт проти мого VPS, використовуючи його доменне ім'я замість адреси loopback. Ця установка передбачає, що список шифрів забезпечується екземпляром openssl у VM: я ще не маю RC4 серед шифрів, які дають YES.

Відповіді:


15

Під час встановлення оновленого сертифіката я виявив, що ця проблема була викликана вказівкою (для домену та кожного субдомену) в ISPConfig весь набір даних, необхідних для HTTPS: сертифікат, приватний ключ, мережа CA та ін.

Іншими словами, видалення набору даних призвело до тесту Qualys, щоб оцінити домен А, і в той же час видалити попередження про RC4. Повернення деталей призводить до повернення попереджень і повернення класу на B, що не залишає місця для сумнівів щодо причинності.

Це так, як якщо б подання деталей для кожного vhost якось створило нове середовище, в якому деякі значення за замовчуванням перекрили набір шифрів, який я вказав у ssl.conf. Дивно.

Рішення полягає в тому, щоб додати специфікацію SSLCipherSuite в текстовій області директив Apache для кожного vhost. Це те, що я маю в конфігурації, що дає мені оцінку A:

SSLProtocol ALL -SSLv2 -SSLv3
SSLHonorCipherOrder on
# Compression is disabled by default on my distribution (CentOS 6)
# SSLCompression off 
SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS

EDIT (2017-05-16): Додаткова інформація про цю проблему: уточнення SSLCipherSuite є обов'язковим. Я не можу зрозуміти, чому ця специфічна директива, хоча і вказана на рівні сервера, не застосовується автоматично до конфігурацій віртуальних хостів . Я використовую Apache 2.2.15 на CentOS 6.9.

EDIT (2018-06-18): Більше інформації. Я тільки що виявив, що директиву SSLCipherSuite можна вказати тільки один раз, і вона буде застосовуватися до всіх віртуальних хостів: у базовому файлі налаштувань mod_ssl (на CentOS 6, файл знайдений на /etc/httpd/conf.d/ssl.conf ), ви просто повинні встановити його зовні за замовчуванням віртуального хоста. У документації Apache 2.2 вказано, що значення за замовчуванням цієї директиви SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP. Я вважаю, що це, де шифрування RC4 походить від: за відсутності будь-якої специфікації, що було для мене, оскільки ніякої специфікації не було в "глобальному" контексті, застосовується значення за замовчуванням. Це розуміння закінчується для мене таємницею. Як не дивно, я збираюся перейти на CentOS 7, коли я знайду це пояснення! HTH.


5
SSLCipherSuite HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4:!SSLv2:!SSLv3
                                                                    ^^^^^^^

Погана ідея. Відключення всіх шифрів SSLv3 призводить до відключення шифрів, які можна використовувати з TLS1.0 і TLS1.1, і залишає лише кілька шифрів, які знову введені з TLS1.2 (якщо ваш сервер підтримує TLS1.2)

Тому я так чи інакше втратив, чому веб-сайти з перевіркою SSL говорять мені, що "сервер приймає RC4". Вони навіть перераховують наступні шифри, які приймаються:

Переконайтеся, що локальні та зовнішні тести мають доступ до одного сервера (IP-адреса). Я бачив багато сайтів, де example.com знаходиться на іншому хості, ніж www.example.com і тести відрізняються.


Так, кореневий домен і його субдомени знаходяться на одному VPS. Існує одна IP-адреса, пов'язана з VPS, і я використовую ISPConfig для керування нею. Дякую.
AbVog

Використовуйте SSLLabs . Порівняйте IP-адреси, які вони показують вам з IP-адресою вашої системи. Переконайтеся, що у вас немає іншого (зворотного) проксі чи CDN, який може вплинути на результат.
Steffen Ullrich

"Відключення всіх шифрів SSLv3 призводить до відключення шифрів, які можна використовувати з TLS1.0 і TLS1.1, і залишає лише кілька шифрів, які знову введені з TLS1.2 (якщо ваш сервер підтримує TLS1.2)" Так що ж є правильним рішенням?
Rohn Adams

@RohnAdams: якщо мета полягає в тому, щоб відключити RC4, ніж '! RC4' частина в порядку. Проблема полягала в перекриванні, використовуючи додатково '! SSLv3'. Як для корисних шифрів використовувати див Генератор шифрів Mozilla .
Steffen Ullrich

2

Лабораторії Qualys SSL здаються дуже чутливими до хостів за замовчуванням і т.д. Переконайтеся, що ВСІ ваші HTTPS VirtualHosts на цьому IP-адресі використовують ті самі налаштування (крім файлів сертифікатів), у мене була подібна проблема, де деякі тести Qualys тестувалися проти моєї цільової VirtualHost деякі з тестів, здавалося, підібрали за замовчуванням VirtualHost. У моєму цільовому пристрої було увімкнено лише один шифр, але Qualys знайшов набагато більший список із типового віртуального пристрою.

Я також знайшов кращий вигляд сценарію тут що дає більш ретельну інформацію про SSL-тести.


2

Просто переглядав це для одного з моїх сайтів. На підставі відповіді @ AbVog, я виявив, що мої директиви були фактично тільки у віртуальному пристрої за замовчуванням. Коли я переніс директиви в глобальний контекст, все було добре.

Як осторонь, я також зустрічався https://cipherli.st/ який має хороший список SSL конфігурації для купа різних пакетів. Нинішня рекомендація щодо apache наступна:

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder On
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff

# Requires Apache >= 2.4
SSLCompression off 
SSLSessionTickets Off
SSLUseStapling on 
SSLStaplingCache "shmcb:logs/stapling-cache(150000)" 

0

На моїй Fedora 25 з Apache / 2.4.25 шифри обробляються крипто-політиками (див. / Etc / cryptopolicies / backends). За замовчуванням установка RC4 повністю відключена, тому не потрібно втручатися в шифри в налаштуваннях Apache. За винятком того, що ви використовуєте останню версію ssl.conf, оскільки вона не встановлена ​​за замовчуванням, але залишена як ssl.conf.rpmnew у каталозі conf.d.

Для налаштування SSL я просто мав вказати сертифікати, ServerName і DocumentRoot. Для Squirrelmail, що є.

SSLCertificateFile /etc/letsencrypt/live/mail.xxxx.dk/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mail.xxxx.dk/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/mail.xxxx.dk/chain.pem
SSLCACertificateFile /etc/letsencrypt/live/mail.xxxx.dk/fullchain.pem
ServerName mail.xxxx.dk:443
DocumentRoot "/usr/share/squirrelmail"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.