Вопрос или проблема
Я попробовал настройки ниже, чтобы удалить CBC шифры в Apache сервере,
SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
SSLHonorCipherOrder on
SSLCompression off
после ряда повторных тестов, CBC шифры все еще включены в моем Apache. Я не уверен, какие шифры мне следует удалить/добавить.
Это распространенная проблема в библиотеке TLS, которую использует ваша установка Apache, OpenSSL, которая не обозначает шифры их полными IANA именами, а часто использует упрощенные, которые зачастую упускают используемый режим шифрования. Это плохая идея, и, насколько я знаю, они больше не делают так с недавно добавленными шифрами.
Ваша конфигурация все еще запрашивает некоторые CBC шифры, например, ECDHE-ECDSA-AES256-SHA384, который на самом деле является TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384. Любой AES шифр, не указывающий режим шифрования, скорее всего, использует CBC в OpenSSL (а значит, и в Apache).
Вы можете искать их по одному, проверяя https://ciphersuite.info/cs/?sort=asc&security=all&singlepage=true&tls=tls12&software=openssl или воспользовавшись опцией, которую я рекомендую, использовать Генератор конфигураций SSL от Mozilla, чтобы быстро получить проверенную конфигурацию (https://ssl-config.mozilla.org/). Чтобы избежать включения генератором CBC шифров, выберите “Intermediate” как настройку, так как “Old” включает некоторые CBC шифры для подключения очень старых клиентов.
Я понимаю, что этот вопрос был задан 2 года назад (сейчас 2025). Но у меня была та же проблема, мне нужно было отключить все слабые CBC
шифры, и я нигде не мог найти приемлемый ответ. Надеюсь, этот ответ поможет всем, кто ищет решение.
После анализа и тестирования с помощью OpenSSL команды openssl ciphers -stdname <list>
, чтобы удостовериться, что я не включаю CBC
шифры без испорченных хороших шифров, финальная цепочка с некоторыми дополнительными рекомендованными командами Apache SLL выглядит так:
SSLCipherSuite HIGH:-AES:-CAMELLIA:AESGCM:!kRSA
SSLHonorCipherOrder on
SSLProtocol +TLSv1.3 +TLSv1.2
SSLSessionTickets off
SSLStrictSNIVHostCheck on
Объяснение.
Список должен начинаться с общего списка. Если он не указан, я обнаружил, что используется ALL
. Поэтому я начал с HIGH
. Ранее я добавлял MEDIUM
в цепочку, чтобы разрешить работу старых браузеров, но теперь это небезопасные SSLv3
шифры, поэтому я больше не добавляю этот список.
Теперь сложная часть. CBC
не может быть удален индивидуально (раньше это был ‘скрытый’ допустимый псевдоним, но больше нет), поэтому я решил удалить все алгоритмы кодирования шифров, которые могли бы иметь CBC
. Это AES
и CAMELLIA
, поэтому они удалены, но также удален GCM
. Теперь мне нужно добавить обратно хорошие GCM
. К сожалению, CAMELLIA
не имеет кодировок GCM, поэтому добавляются только AESCGM
. Наконец, все шифры, использующие RSA
обмен ключами, удалены навсегда.
Я проверил сайт, где я внедрил это, используя SSL LABS. Теперь все слабые шифры исчезли. Однако следует помнить, что теперь некоторые старые браузеры/ОС не будут работать (например, Win Phone 8.1, iOS 8.4, OSX 10.10). Это баланс между безопасностью и поддержкой пользователей с устаревшими устройствами. Лично я выбираю безопасность.
.
Ответ или решение
Удаление или отключение CBC (Cipher Block Chaining) шифров из конфигурации Apache сервера – важная задача, направленная на повышение безопасности вашего сервера. Этот процесс может быть вызван необходимостью отказа от устаревших или слабых шифров, которые могут стать уязвимостью для атак. В этом ответе мы разберем теорию, применим её на практике, и рассмотрим, как вы можете внедрить лучшие решения для безопасности вашего сервера.
Теория
CBC (Cipher Block Chaining) – это режим шифрования, который исторически использовался в различных протоколах для увеличения безопасности передачи данных. Однако со временем были обнаружены уязвимости, такие как BEAST (Browser Exploit Against SSL/TLS) атака, которые сделали использование CBC менее безопасным, особенно с появлением более надежных альтернатив, таких как GCM (Galois/Counter Mode).
Основная задача – минимизация рисков, которые могут возникнуть в результате эксплуатации уязвимостей, связанных с CBC. Для этого предлагается отказаться от использования CBC-шифров в пользу более современных и защищённых вариантов.
Пример
Ваши предыдущие настройки попытались отключить CBC, но не все объявления были корректными:
SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
SSLHonorCipherOrder on
SSLCompression off
Проблема заключается в том, что некоторые из этих шифров на самом деле используют CBC, несмотря на их наименование. Например, ECDHE-ECDSA-AES256-SHA384
является CBC-шифром, хотя это не очевидно из-за отсутствия прямого указания на режим шифрования. Это демонстрирует важность понимания каждой записи в конфигурации.
Применение
Для эффективного удаления CBC-шифров в Apache используйте следующие рекомендации:
-
Используйте команду OpenSSL для проверки шифров. Выполните
openssl ciphers -stdname <список>
, чтобы удостовериться, что CBC отсутствуют в предложенных шифрах. Это позволяет избежать нежелательных шифров в вашей конфигурации. -
Проверьте конфигурацию с использованием надежных инструментов. Хорошим примером является генератор конфигурации SSL от Mozilla (https://ssl-config.mozilla.org/). Этот инструмент может предложить протестированные конфигурации, которые исключают устаревшие шифры.
-
Примеры конфигурации:
SSLCipherSuite HIGH:!aNULL:!MD5:!3DES:!CBC:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305
SSLHonorCipherOrder on
SSLProtocol +TLSv1.2 +TLSv1.3
SSLSessionTickets off
SSLStrictSNIVHostCheck on
В этой конфигурации:
- Используйте
HIGH
для указания высоко-уровневых шифров. - Исключите все шифры с CBC, RSA (как ключевой обмен) и другие устаревшие механизмы (
3DES
). - Включение
TLSv1.2
иTLSv1.3
обеспечивает совместимость с современными клиентами.
- Проводите регулярные тесты и обновления. Используйте сервисы, такие как SSL Labs, чтобы проверить пригодность вашей конфигурации и убедиться, что она не поддерживает устаревшие шифры. Имейте в виду, что современная конфигурация может не поддерживать устаревшие устройства и браузеры, но это необходимая жертва для повышения безопасности.
Таким образом, отключение CBC-шифров в сервере Apache – это важный шаг для обеспечения безопасности передаваемых данных. Применяя данную теорию на практике и соблюдая приведенные рекомендации, вы значительно повысите защиту вашего сервера от возможных атак.