У меня есть 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`.
Исправить это просто; не указывайте глобальное имя сервера, как любой другой виртуальный хост. Однако эти вопросы вызывают у меня любопытство:
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>
<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>