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

Виртуальный хост Apache SSL, использующий SNI, игнорирует ServerName

Я хотел бы обслуживать клиентов с поддержкой SNI, которые отправляют неправильное имя хоста с ошибкой 400 Bad Request, но Apache всегда обслуживает виртуальный хост по умолчанию в этой ситуации. Я не могу добавить виртуальный хост по умолчанию, который отправляет 400 Bad Request status, потому что клиенты с отключенным SNI всегда будут получать этот виртуальный хост.

Похоже, что Название сервера Директива виртуального хоста игнорируется для клиентов с отключенным SNI, когда я включаю виртуальные хосты на основе имени в установке Apache с поддержкой SNI.

См. Следующую конфигурацию виртуального хоста:

NameVirtualHost 192.168.4.46:443
<VirtualHost 192.168.4.46:443>
        ServerName 192.168.4.46
        DocumentRoot /var/www/error-page/

        SSLEngine on
        SSLCertificateFile /path/to/certificate.crt
        SSLCertificateKeyFile /path/to/certificate.key
</VirtualHost>
<VirtualHost 192.168.4.46:443>
        ServerName test-ssl
        DocumentRoot /var/www/valid-website/

        SSLEngine on
        SSLCertificateFile /path/to/certificate.crt
        SSLCertificateKeyFile /path/to/certificate.key
</VirtualHost>

Если я использую клиент с отключенным SNI, я получаю страницу с ошибкой несмотря на из Хост: заголовок отправляю в запросе. Поскольку я использую один и тот же сертификат на обоих виртуальных хостах, я хотел бы, чтобы клиенты с отключенным SNI могли по-прежнему подключаться ко второму виртуальному хосту на основе совпадения с Название сервера.

Если бы я переключил положение виртуальных хостов, веб-сайт был бы виртуальным хостом по умолчанию, а затем SNI-включен клиенты получат веб-сайт вместо ошибки, если они укажут неправильный Хост: в заголовках.

Итак, как мне заставить Apache выдавать ошибку при каждой ошибке? Хост: заголовок независимо от поддержки SNI, при этом все еще обслуживая веб-сайт при использовании клиента с отключенным SNI и обслуживая право виртуальный хост при использовании клиента с поддержкой SNI?

Удалите ServerName в виртуальном хосте, который вы хотите использовать в режиме ошибки. Должно работать

Я полагаю, что кратчайший ответ будет:

MOD_REWRITE

Установите cond для проверки заголовка хоста; Если это неверно, перенаправьте запрос на страницу с ошибкой.

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


Если окажутся «короче / проще» варианты, я подозреваю, что этот вариант обеспечит четкую логику обработки запросов. Это решение предполагает, что вы хотите ВСЕ независимо от статуса SNI запрашивает соответствующий заголовок хоста для данного виртуального хоста.