Назад | Перейти на главную страницу

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

Недавно я переместил веб-сайт WordPress с небольшим магазином от хостинг-провайдера на собственный сервер под управлением Ubuntu Server 12.04.2 LTS и Apache 2.2.22. Мне нужен SSL для магазина. Я установил пару простых хостов на новом 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

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

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

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

Мой сервер отвечает HTTP 400: неверный запрос.

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

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

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

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

В моем случае проблемой было создание нового виртуального хоста с подчеркиванием. У меня есть 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>

На первый взгляд кажется, что проблема клиента ... Какой браузер вызывает эту проблему?

В сообщении предполагается, что имя хоста, которое клиент отправляет во время установки ssl-соединения, не совпадает с именем хоста, которое клиент отправляет в запросе HTTPS после включения уровня SSL.

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