Краткое описание: http://example.com правильно перенаправлен на https://example.com и загружается. http://www.example.com не перенаправляется на https://www.example.com .Непосредственная загрузка завершается ошибкой сертификата.
Я установил сертификат SSL с помощью certbot. Когда я запрашиваю у certbot список сертификатов, я получаю:
Found the following certs:
Certificate Name: example.com-0004
Domains: example.com www.example.com
Expiry Date: 2020-05-17 21:13:21+00:00 (VALID: 89 days)
Certificate Path: /etc/letsencrypt/live/example.com-0004/fullchain.pem
Private Key Path: /etc/letsencrypt/live/example.com-0004/privkey.pem
В моей конфигурации Apache у меня есть:
<VirtualHost *:80>
ServerName example.com
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [L,NE,R]
</VirtualHost>
<VirtualHost *:80>
ServerName www.example.com
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [L,NE,R]
</VirtualHost>
<IfModule mod_ssl.c>
NameVirtualHost *:443
Include /etc/httpd/conf/httpd-le-ssl.conf
</IfModule>
А в httpd-le-ssl.conf у меня есть:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName example.com
DocumentRoot /var/www/html
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/example.com-0004/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com-0004/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com-0004/chain.pem
</VirtualHost>
</IfModule>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName www.example.com
DocumentRoot /var/www/html
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/example.com-0004/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com-0004/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com-0004/chain.pem
</VirtualHost>
</IfModule>
У меня два вопроса. Почему не работает перенаправление на www? Почему сертификат не распознается для www? Chrome сообщает мне:
This server could not prove that it is www.ncprepswimming.com;
its security certificate is not trusted by your computer's operating system.
This may be caused by a misconfiguration or an attacker intercepting your connection.
Что не так с моим сертификатом и моей конфигурацией? Результат apachectl -S:
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:443 is a NameVirtualHost
default server www.example.com (/etc/httpd/conf.d/ssl.conf:76)
port 443 namevhost www.example.com (/etc/httpd/conf.d/ssl.conf:76)
port 443 namevhost example.com (/etc/httpd/conf/httpd-le-ssl.conf:2)
port 443 namevhost www.example.com (/etc/httpd/conf/httpd-le-ssl.conf:12)
*:80 is a NameVirtualHost
default server www.example.com (/etc/httpd/conf/httpd.conf:1006)
port 80 namevhost www.example.com (/etc/httpd/conf/httpd.conf:1006)
port 80 namevhost db.example.com (/etc/httpd/conf/httpd.conf:1086)
alias www.db.example.com
port 80 namevhost example.com (/etc/httpd/conf/httpd.conf:1092)
port 80 namevhost www.example.com (/etc/httpd/conf/httpd.conf:1099)
port 80 namevhost svn.example.com (/etc/httpd/conf/httpd.conf:1106)
alias www.svn.example.com
Syntax OK
Если вы изучите предложенный сертификат, посетив URL-адреса с www и без www, вы увидите, что версия с www не использует один и тот же сертификат. Это должно сказать вам, что у вас, вероятно, где-то есть повторяющаяся / плохая конфигурация, указывающая на неправильный сертификат.
Вывод apachectl -S ясно показывает несколько www.example.com на порт 443 (при условии, что здесь правильная обфускация):
VirtualHost configuration:
default server www.example.com (/etc/httpd/conf.d/ssl.conf:76)
port 443 namevhost www.example.com (/etc/httpd/conf.d/ssl.conf:76)
port 443 namevhost www.example.com (/etc/httpd/conf/httpd-le-ssl.conf:12)
Вам нужно самостоятельно посмотреть конфигурации, чтобы определить, какой из них правильный, а какой нет, но, вероятно, вам просто нужно удалить ssl.conf (или прокомментировать несколько строк) и перезапустите.