Задний план: Мы перенесли 2 старых веб-сервера на 2 новых, более надежных сервера - Ubuntu 17.04 и 18.04. Мы приобрели SSL-сертификаты Thawte для доменов, которые мы размещаем (около 20), чтобы использовать их на 2 серверах. Каждый сервер имеет свой собственный статический IP-адрес.
Сертификаты были настроены в стиле Common Name www.example.org, и альтернативные имена www.example.org , example.org , www2.example.org
Сервер 17.04 содержит поддомены www2. Сертификаты SSL были настроены, и все работает нормально - доставка https и отсутствие несоответствий сертификатов
Я установил сервер 18.04, содержащий наш «www», и попытался отразить настройку. После некоторых проб и ошибок (забыв о заголовках a2enmod, синтаксической ошибке vhost в файле .conf) я получил первый домен для доставки https
Однако, когда я настроил следующий домен .conf vhost, браузеры с поддержкой SNI выдавали ошибку, что сайт использовал сертификат первого домена. Я погуглил и экспериментировал, проверил свой синтаксис и пути - я застрял.
Интересно, что когда я использую инструменты проверки SSL, они сообщают, что второй домен проходит, и, похоже, он сообщает о правильном владении сертификатом. Но все браузеры, как внутри сети, так и за ее пределами, сообщают об ошибке. Если я проигнорирую ошибку и продолжу, это приведет меня к 1-му домену.
Каждый домен имеет свой собственный файл .conf в / etc / apache2 / sites-available. Я читал, где кто-то советовал поместить все виртуальные хосты в 1 .conf - я попробовал тот же результат, но второй домен в тот раз не прошел проверку SSL.
Похоже, что мой 2-й домен возвращает сертификат 1-го домена, и, судя по тому, что я читал, ожидал, что он сделает это для всех остальных. Эти сайты работают, и я не могу (не должен) отключать их во время тестирования. Я использую наш наименее посещаемый сайт для второго примера домена. Кто-то предположил, что это может быть проблема кеширования, и проблема разрешилась сама собой через много часов. Я не могу помочь, но думаю, что пропустил некоторые настройки сервера, которые задействуют SNI, но Apache 2.4 предположительно предоставляет SNI из коробки
из ports.conf
Listen 80
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
из example.conf
<VirtualHost *:80>
ServerName www.example.org
ServerAlias example.org www4.example.org
ServerAdmin webmaster@xxxxxxxx.com
Redirect 301 "/" "https://www.example.org/"
</VirtualHost>
<IfModule ssl_module>
SetEnvIf HTTPS https HTTPS=on
Header always set Strict-Transport-Security "max-age=63072000" env=HTTPS
Header always set Content-Security-Policy: upgrade-insecure-requests env=HTTPS
Header always set X-XSS-Protection: "1; mode=block"
Header always set X-Frame-Options: sameorigin
Header always set X-Content-Type-Options: nosniff
Header always set X-Permitted-Cross-Domain-Policies: "master-only"
<VirtualHost *:443>
ServerName www.example.org
DocumentRoot /var/www/example/
ServerAdmin webmaster@xxxxxxxx.com
SSLEngine on
SSLCertificateFile "/etc/apache2/ssl/crt/www.example.org.crt"
SSLCertificateChainFile "/etc/apache2/ssl/crt/IntermediateCA.example.crt"
SSLCertificateKeyFile "/etc/apache2/ssl/www.example.org.key"
DirectoryIndex index.html index.htm index.php
<FilesMatch "^wp-login\.php$|^wp-admin/.*">
AuthName "Login Login"
AuthType Basic
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</FilesMatch>
</VirtualHost>
</IfModule>
из otherdomain.conf
<VirtualHost *:80>
ServerName www.otherdomain.org
ServerAlias otherdomain.org www4.otherdomain.org
ServerAdmin webmaster@xxxxxxxx.com
Redirect 301 "/" "https://www.otherdomain.org/"
</VirtualHost>
<IfModule ssl_module>
SetEnvIf HTTPS https HTTPS=on
Header always set Strict-Transport-Security "max-age=63072000" env=HTTPS
Header always set Content-Security-Policy: upgrade-insecure-requests env=HTTPS
Header always set X-XSS-Protection: "1; mode=block"
Header always set X-Frame-Options: sameorigin
Header always set X-Content-Type-Options: nosniff
Header always set X-Permitted-Cross-Domain-Policies: "master-only"
<VirtualHost *:443>
ServerName www.otherdomain.org
DocumentRoot /var/www/otherdomain/
ServerAdmin webmaster@xxxxxxxx.com
SSLEngine on
SSLCertificateFile "/etc/apache2/ssl/crt/www.otherdomain.org.crt"
SSLCertificateChainFile "/etc/apache2/ssl/crt/IntermediateCA.otherdomain.crt"
SSLCertificateKeyFile "/etc/apache2/ssl/www.otherdomain.org.key"
DirectoryIndex index.html index.htm index.php
<FilesMatch "^wp-login\.php$|^wp-admin/.*">
AuthName "Login Login"
AuthType Basic
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</FilesMatch>
</VirtualHost>
</IfModule>
Возможно, важно то, что сайты и сервер "www" являются сайтами WordPress. Субдомен «www4», который я использовал для целей тестирования при переносе указанных сайтов WordPress из среды PHP 5.2 в 7. После того, как сайты отображались правильно, я указал DNS (без Cloudflare) для www со статического IP-адреса старого сервера на статический IP-адрес нового (Ubuntu18.04) сервера.
Вещи, которые я пробовал:
добавление символа * в ports.conf
sudo service apache2 перезапуск
sudo service apache2 остановить / запустить
комментируя перенаправление, которое у меня есть в порту 80 Virtualhost
проверка путей сертификатов
ожидание 6+ часов
Находясь в этом почти неделю, я исчерпал все свои поисковые комбинации, признал поражение и просил о помощи. Заранее спасибо.
Некоторое время назад я понял это, повозившись с порядком вещей. Что в итоге сработало для всех файлов .conf для всех наших сайтов:
<VirtualHost *:80>
ServerName www.otherdomain.org
ServerAlias www4.otherdomain.org otherdomain.org
ServerAdmin webmaster@otherdomain.org
DocumentRoot /var/www/otherdomain/
Redirect 301 "/" "https://www.otherdomain.org/"
</VirtualHost>
<IfModule ssl_module>
SetEnvIf HTTPS https HTTPS=on
Header always set Strict-Transport-Security "max-age=63072000" env=HTTPS
Header always set Content-Security-Policy: upgrade-insecure-requests env=HTTPS
Header always set X-XSS-Protection: "1; mode=block"
Header always set X-Frame-Options: sameorigin
Header always set X-Content-Type-Options: nosniff
Header always set X-Permitted-Cross-Domain-Policies: "master-only"
<VirtualHost *:443>
ServerName www.otherdomain.org
ServerAlias otherdomain.org
DocumentRoot /var/www/otherdomain/
ServerAdmin webmaster@societyhq.com
SSLEngine on
SSLCertificateFile "/etc/apache2/ssl/crt/www.otherdomain.org.crt"
SSLCertificateChainFile "/etc/apache2/ssl/crt/IntermediateCA.otherdomain.crt"
SSLCertificateKeyFile "/etc/apache2/ssl/www.otherdomain.org.key"
DirectoryIndex index.html index.htm index.php
<FilesMatch "^wp-login\.php$|^wp-admin/.*">
AuthName "Login Login"
AuthType Basic
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</FilesMatch>
</VirtualHost>
</IfModule>
Я не знаю, что именно было виновником использования сертификатов с первого раза в моих последующих файлах конфигурации vhosts.