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

Защищенное соединение имени сервера - свободное совпадение

Мы обновили конфигурацию развертывания Apache, чтобы разрешить запросы без www к нашему серверу (https://example.com). Для https-соединений нам это нужно, потому что имя не соответствует сертификату. Это было хорошо, хотя недавно мы заметили безопасные среды локального развертывания (https://chris.example.com) также указывают на это новое развертывание. Мы закомментировали новое развертывание, чтобы подтвердить, что это изменение вызвало его, и так оно и было. Мы предположили, что это было из servername установка, которую мы установили. Вот наши начальные настройки:

NameVirtualHost example.com:443
<VirtualHost example.com:443>
    ServerAdmin webmaster@example.com
    DocumentRoot /var/www/html/www.example.com
    ServerName example.com
    SSLEngine on
    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
    SSLProtocol all
    SSLCertificateFile /usr/local/ssl/crt/example2017.cert
    SSLCertificateKeyFile /usr/local/ssl/private/ssl2017.key
    SSLCACertificateFile /usr/local/ssl/crt/example2017intermediate.pem
    DirectoryIndex index.html
    DirectoryIndex index.php
    LogLevel notice
    ErrorLog /var/log/httpd/www.example.com/error.log
    LogFormat "%{%Y-%m-%d %H:%M:%S}t %a %u %A %p %m %U %q %>s \"%{User-agent}i\"" w3c_extended
    CustomLog /var/log/httpd/www.example.com/access.log w3c_extended
</VirtualHost>

После того, как комментирование сработало, мы предположили, что это ServerName мы читаем на сайте Apache следующее:

Иногда сервер работает за устройством, которое обрабатывает SSL, например обратным прокси, балансировщиком нагрузки или устройством разгрузки SSL. В этом случае укажите схему https: // и номер порта, к которому подключаются клиенты, в директиве ServerName, чтобы убедиться, что сервер генерирует правильные самореференциальные URL-адреса.

-http://httpd.apache.org/docs/2.2/mod/core.html#servername

Итак, мы обновили servername запись в:

ServerName https://example.com:443

это позволило главной странице (https://example.com) для загрузки и перенаправления, но среды разработки (https://chris.example.com) снова загружались с него. Первоначально я подумывал попробовать явное стартовое правило:

ServerName ^example.com

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

Вот httpd -S вывод:

VirtualHost configuration:
192.168.0.0:443     is a NameVirtualHost
         default server example.com (/etc/httpd/conf/httpd.conf:1065)
         port 443 namevhost example.com (/etc/httpd/conf/httpd.conf:1065)
wildcard NameVirtualHosts and _default_ servers:
*:443                  is a NameVirtualHost
         default server *.example.com (/etc/httpd/conf.d/ssl.conf:74)
         port 443 namevhost *.example.com (/etc/httpd/conf.d/ssl.conf:74)
         port 443 namevhost www.example.com (/etc/httpd/conf/httpd.conf:1046)
         port 443 namevhost chris.example.com (/etc/httpd/conf/httpd.conf:1096)
         port 443 namevhost dan.example.com (/etc/httpd/conf/httpd.conf:1129)
         port 443 namevhost rich.example.com (/etc/httpd/conf/httpd.conf:1159)
         port 443 namevhost rich2.example.com (/etc/httpd/conf/httpd.conf:1189)
         port 443 namevhost danny12.example.com (/etc/httpd/conf/httpd.conf:1219)
         port 443 namevhost nick.example.com (/etc/httpd/conf/httpd.conf:1249)
         port 443 namevhost cdn.example.com (/etc/httpd/conf/httpd.conf:1300)
         port 443 namevhost origin_server.example.com (/etc/httpd/conf/httpd.conf:1316)
*:80                   is a NameVirtualHost
         default server www.example.com (/etc/httpd/conf/httpd.conf:1034)
         port 80 namevhost www.example.com (/etc/httpd/conf/httpd.conf:1034)
         port 80 namevhost dfw.example.com (/etc/httpd/conf/httpd.conf:1084)
         port 80 namevhost chris.example.com (/etc/httpd/conf/httpd.conf:1114)
         port 80 namevhost dan.example.com (/etc/httpd/conf/httpd.conf:1147)
         port 80 namevhost rich.example.com (/etc/httpd/conf/httpd.conf:1177)
         port 80 namevhost rich2.example.com (/etc/httpd/conf/httpd.conf:1207)
         port 80 namevhost danny12.example.com (/etc/httpd/conf/httpd.conf:1237)
         port 80 namevhost nick.example.com (/etc/httpd/conf/httpd.conf:1267)
         port 80 namevhost origin_server.example.com (/etc/httpd/conf/httpd.conf:1279)
         port 80 namevhost cdn.example.com (/etc/httpd/conf/httpd.conf:1290)
Syntax OK

Новое развертывание началось на строке 1064 и закончилось на 1081.

После более тщательного расследования в чате выяснилось, что были два NameBasedVirtualHost заявления, один для *:443 и еще один для example.com:443 у первого есть все поддомены VirtualHost декларации, а в последнем есть только одно для example.com сам.

Делаем его единообразным NameBasedVirtualHost *:443 объявление и все поддомены и основной домен, ссылающиеся на него, устранили проблему.