Допускают ли какие-либо версии Apache разное объявление SSLProtocol для разных виртуальных хостов? [дублировать]

Я пытаюсь протестировать патч для уязвимости пуделя, который включает отключение SSLv3 на моем веб-сервере. Чтобы сначала проверить это в непроизводственной среде, я устанавливаю SSLProtocol на VirtualHost для другого тестового сервера. Моя конфигурация выглядит примерно так:

<VirtualHost *:443>
    SSLEngine On
    SSLProtocol All -SSLv2 -SSLv3
    ServerName test.mysite.com
    # bunch of other stuff omitted
</VirtualHost>

Однако даже после перезапуска apache мой тестовый сайт по-прежнему считается уязвимым. Ожидается ли это, что это сработает? Мне интересно, нужно ли мне устанавливать его в глобальной конфигурации ssl или есть что-то еще тонкое, что заставляет настройку не принимать и / или работать.

13
задан 31 October 2015 в 09:16
3 ответа

Вы можете установить протокол SSL только для первого VirtualHost в файле конфигурации. Все последующие записи VirtualHost будут наследовать эту настройку из первой записи и автоматически игнорировать свои собственные настройки из-за ошибки OpenSSL .

Существует соответствующий отчет об ошибке для mod_ssl , но как описанная в отчете об ошибке, проблема должна быть решена в OpenSSL (сертификат наследуется, но не протоколы).

Наборы шифров должны быть установлены независимо для каждого VirtualHost, в противном случае вы получите список по умолчанию, включая много небезопасных шифров. Кроме того, имейте в виду, что старые клиенты, которые не поддерживают указание имени сервера (SNI), всегда будут использовать хост по умолчанию (если не заблокирован с помощью SSLStrictSNIVHostCheck ), что может затруднить ваше тестирование.

Короче говоря. , вы должны иметь возможность указывать собственные наборы шифров и сертификаты для каждого виртуального хоста, но пока ошибка не будет исправлена, не ожидайте правильного поведения с пользовательскими протоколами для каждого виртуального хоста.

Я столкнулся с этой проблемой с Apache 2.4 и modssl с OpenSSL 1.0.1k, и я ожидаю, что с Apache 2.2 будут возникать те же проблемы.

Обновление (октябрь 2016 г.): Ошибка OpenSSL была отмечена как исправленная 13 октября 2016 г. Однако она была частью массовое закрытие открытых проблем, и хотя было предоставлено «частичное исправление», проблема так и не была устранена полностью.

Обновление (апрель 2018 г.): Повторно отправленная ошибка OpenSSL теперь имеет исправление ( от 9 апреля 2018 г.). Этот патч изменит поведение экземпляров Apache, настроенных с несколькими виртуальными хостами SNI:

Отклонение подключений, не соответствующих протоколу vhost SSLProtocol

Он был разработан и протестирован с 2.4.27 и в производстве с этим версия. Патч был модифицирован для версии 2.4.33 и слегка протестирован.

Это проверяет версию соединения по протоколу SSL. настроен для виртуального хоста, который соответствует на основе SNI. Поскольку соединение изначально выполняется с помощью SSLProtocol настроен для хоста по умолчанию для порта, хост по умолчанию должен включают все протоколы, которые будут поддерживаться любым виртуальным хостом.

Этот патч добавляет дополнительный статус возврата APR_EMISMATCH к init_vhost, так что ssl_callback_ServerNameIndication обратный вызов, зарегистрированный в OpenSSL, может вернуть фатальное предупреждение SSL_AD_PROTOCOL_VERSION. Это предназначено для получения такого же ответа для ClientHello, поскольку для него указан протокол SSL, который не включите рассматриваемую версию. Поскольку обратный вызов SNI вызывается во время обработки ClientHello и до того, как ответ

Если вы внезапно видите сообщения следующего формата:

Rejecting version [version] for servername [hostname]

Тогда вам следует дважды проверить свой SSLProtocol для вашего хоста по умолчанию.

16
ответ дан 4 January 2021 в 10:09

У вас могут быть разные протоколы SSL для каждого виртуального хоста, если они прослушивают другой IP-адрес.

Пример с конкретным хостом, разрешающим TLSv1, а все остальные разрешают только TLSv1.1 и TLSv1.2. - и один, разрешающий только TLSv1.2:

<VirtualHost *:443>
  SSLEngine On
  SSLProtocol All -SSLv2 -SSLv3 -TLSv1
  ServerName test.mysite.com
  # bunch of other stuff omitted
</VirtualHost>

<VirtualHost 10.0.0.2:443>
  SSLEngine On
  SSLProtocol All -SSLv2 -SSLv3
  ServerName test2.mysite.com
</VirtualHost>

<VirtualHost 10.0.0.3:443>
  SSLEngine On
  SSLProtocol TLSv1.2
  ServerName test2.mysite.com
</VirtualHost>
5
ответ дан 4 January 2021 в 10:09

Если вы используете указание имени сервера (SNI) с вашим виртуальным хостом, вы действительно не можете определить несколько версий SSL.

Однако, если вы используете выделенный сервер, вы, вероятно, сможете добавить к своему серверу еще один IP-адрес. Таким образом, вы сможете использовать разные версии SSL для каждого IP-адреса. Вам просто нужно изменить настройки виртуального хоста на ожидаемый IP: 443.

0
ответ дан 4 January 2021 в 10:09

Теги

Похожие вопросы