На этот вопрос уже есть ответ здесь:
У меня возникла следующая проблема при попытке настроить сертификат SSL.
При открытии имени корневого домена example.com
в браузере отображается зеленый значок, и все в порядке. Однако при попытке открыть с www-версией www.example.com
я вижу следующее сообщение
www.example.com использует недопустимый сертификат безопасности.
Сертификат действителен только для example.com
(Код ошибки: ssl_error_bad_cert_domain)
Из этого сообщения я предполагаю, что SSL был выпущен только для example.com (пожалуйста, поправьте меня, если я ошибаюсь), сейчас кроме покупки другого сертификата, который будет включать обе версии, есть ли другой способ избежать этого предупреждения, а именно перенаправить весь трафик на example.com
, прежде чем даже "показать" браузеру сертификат? Таким образом, когда пользователь вводит https://www.example.com
, он перенаправляет на https://example.com
, где сертификат уже действителен.
У меня есть это в файле моего сайта
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect / https://example.com/
</VirtualHost>
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /home/username/www/example
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/example.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/example.com.private.key
SSLCertificateChainFile /etc/apache2/ssl/example.com.intermediate.crt
</VirtualHost>
Я пытался установить условие перенаправления внутри VH, но это не помогло.
RewriteCond %{HTTP_HOST} ^www.example.com
RewriteRule ^/(.*)$ https://example.com/$1 [L,R=301]
Apache 2.2.22, Debian 7.9
Спасибо
Нет. Протокол TLS (и его устаревший предшественник, SSL) проверяет сертификат в соответствии с хостовой частью URL, в данном случае с полным доменным именем, до того, как будут переданы какие-либо данные. Это по своей конструкции и отвечает нескольким требованиям безопасности.
Вы должны получить сертификат (он не называется "SSL"), выданный для обоих ваших доменных имен; функция, используемая для этого, называется subjectAlternativeName или SAN. Иногда вы также можете получить подстановочный сертификат, который включает в себя как *.example.com
, так и example.com
.
Во-первых, большинство сертификатов должно уже поставляться с www. Я не слышал о таком, который выпускается только для корневого домена. TLS на самом деле проверяет весь URL, а не только корневой домен, поэтому сертификат для корневого домена, без WWW, будет недействительным, если он используется для WWW домена. Также существуют Wildcard и EV сертификаты, но они гораздо дороже.
Что касается SSL-сертификатов, вы не задумывались над тем, чтобы использовать Let's Encrypt вместо того, чтобы покупать сертификат полностью? Let's Encrypt позволяет бесплатно выдавать несколько сертификатов для любого количества поддоменов (до 100).