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

Apache httpd2.4 - Иерархия конфигурации VirtualHost и _default_

У меня есть httpd 2.4 на RHEL7, и я экспериментирую с интеграцией SNI, прежде чем применять его в производственной среде. Я испытал интересное поведение. Сервер всегда обслуживает совпадающий контент виртуального хоста www.example.org с сертификатом, указанным в <Virtualhost _default_:443> директива внутри conf.d/ssl.confвместо того conf.d/vhost.conf.

Однако, если директива DocumentRoot с другим расположением указана в <Virtualhost _default_:443> директиве, сервер по-прежнему обслуживает тот же согласованный контент виртуального хоста, который указан в conf.d/vhosts.conf с фальшивым сертификатом. Даже с разными DocumentRoot расположение & ServerName www.example.org директивы в разделе _default_, сервер по-прежнему действует так же, как и раньше.

Дело здесь в директиве ServerName в глобальной конфигурации, которая не указана. Таким образом, при запуске сервер действует в соответствии с текущим активным именем хоста localhost, которое также является www.example.org. Когда имя хоста изменяется на другое имя хоста, после перезапуска httpd сервер действует как обычно, как и ожидалось.

Однако утверждается Вот что конфигурации _default_ никогда не должны перезаписывать уже согласованный запрос из другой конфигурации виртуального хоста.

С моей точки зрения, поскольку рукопожатие SNI и TLS происходит в начале связи, httpd-сервер не может отделиться, так как запрашиваемый контент принадлежит главному глобальному серверу или соответствующему виртуальному хосту (с тем же ServerName). Наконец, сервер предоставляет сертификат, указанный в глобальной конфигурации, однако контент обслуживается с учетом директивы DocumentRoot в конфигурации виртуального хоста conf.d / vhosts.conf`.

Исправить это просто; не указывайте глобальное имя сервера, как любой другой виртуальный хост. Однако эти вопросы вызывают у меня любопытство:

Связанное содержимое conf.d / ssl.conf:

Listen 443 https
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:!MEDIUM:!LOW:!SSLv2:!EXPORT
<VirtualHost _default_:443>
        DocumentRoot "/var/www/html"
        ErrorLog logs/ssl_error_log
        TransferLog logs/ssl_access_log
        LogLevel warn
        SSLEngine on
        SSLCertificateFile /etc/pki/tls/certs/localhost.crt
        SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
</VirtualHost>

Содержимое conf.d / vhosts.conf:

<VirtualHost 192.168.1.1:443>
        SSLEngine On
        ServerName sni.example.org
        DocumentRoot /var/www/html/sni.html/
        SSLCertificateFile certs/sni.cer
        SSLCertificateKeyFile certs/sni.key
</VirtualHost>