Конфликт между доменами, предоставленными SNI и HTTP

Конфликт между доменами, предоставленными SNI и HTTP

Недавно я перенес сайт WordPress с небольшим магазином от хостинг-провайдера на свой собственный сервер с Ubuntu Server 12.04.2 LTS и Apache 2.2.22. Мне требуется SSL для магазина. Я настроил пару простых vhosts на новом IP для сервера, один привязал к порту 80 определенного IP, а другой привязал к порту 443. Оба имеют ServerName www.example.comи ServerAlias example.comв конфигурации vhost. У меня есть SSLStrictSNIVHostCheck off.

Сайт работает очень медленно, но работает. В журналах ошибок я получаю следующее.

[Error] Hostname example.com provided via SNI and hostname www.example.com provided via HTTP are different

Я предполагаю, что замедление связано с сообщением выше. Есть идеи, почему это появляется и что я могу с этим сделать?

решение1

Посмотрите на свой журнал доступа (не журнал ошибок). Зная время и дату ошибки, вы сможете определить нарушающий запрос и выяснить агента пользователя. В моем случае это был бот:

"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.2)"

Мой сервер отвечает HTTP 400: Bad Request.

Если я не ошибаюсь, при согласовании TLS клиент отправляет имя хоста дважды: один раз ДО того, как SSL-соединение будет установлено в SNI (Server Name Indication) и один раз ПОСЛЕ в самом HTTP-запросе. Если имена серверов не совпадают, это будет означать, что клиент сломан, и не должно иметь ничего общего с тем, как настроен ваш сервер.

Может быть, они когда-нибудь исправят своего бота, а пока, наверное, можно его игнорировать. Сомневаюсь, что это может вызвать замедление на хосте, если только запросы не поступают с очень высокой скоростью.

решение2

Может быть, эта ошибка вызвананамереннонекоторыми клиентами для проверки уязвимостей вашего сервера. Я обнаружил, что запрос от researchscan367.eecs.umich.eduвызвал ошибку на сервере, который я обслуживаю. В этом случае хорошо, что ошибка произошла.

Мне стало интересно, какие виды атак возможны, и я задал этот вопрос на Security Stack Exchange:Какой тип атаки предотвращает код ошибки Apache2 AH02032?

решение3

В моем случае проблема была в создании нового виртуального хоста с подчеркиванием. У меня есть wildcard SSL-сертификат.

Не сработало:

<VirtualHost *:443>
        SSLEngine on
        ServerName sub_domain.example.com
        Redirect / https://www.example.com/restofmyredirectlink
</VirtualHost>

Хотя Apache успешно перезапустился, я получил ошибки HTTP 400. В журнале ошибок:

[Wed Sep 05 11:28:00.349960 2018] [ssl:error] [pid 19906:tid 140392626808576] AH02031: Hostname sub_domain.example.com provided via SNI, but no hostname provided in HTTP request

Но удаление подчеркивания сработало:

<VirtualHost *:443>
        SSLEngine on
        ServerName subdomain.example.com
        Redirect / https://www.example.com/restofmyredirectlink
</VirtualHost>

решение4

Проверьте файл /etc/hosts, чтобы увидеть, назначаете ли вы доменное имя локальному (внутреннему) IP-адресу. Не забудьте перезапустить демон кэширования службы имен после изменения /etc/hosts service nscd restart

Связанный контент