МОЯ ЦЕЛЬ
Я хотел бы сделать веб-сайт доступным только через SSL (зашифрованный) и с перенаправлением многих доменов только на один главный домен (без дублирования контента), и все варианты www не должны иметь www.
Веб-сайт размещен на сервере Apache и настроен как виртуальный хост.
Я хотел бы иметь следующие перенаправления:
http://example.com -> https://example.com
http://www.example.com -> https://example.com
https://www.example.com -> https://example.com
http://example.de -> https://example.com
http://www.example.de -> https://example.com
https://example.de -> https://example.com
https://www.example.de -> https://example.com
[...]
ОШИБКА / ПРОБЛЕМА
Моя проблема в том, что определенные запросы (например, https://www.example.de
) перенаправляются на https://example.com
но например firefox говорит, что соединение небезопасно (SSL_ERROR_BAD_CERT_DOMAIN
). Некоторые другие работают.
Моя конфигурация vhost выглядит так:
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com www.example.de example.de
RedirectMatch 301 (.*) https://example.com$1
</VirtualHost>
<VirtualHost *:443>
ServerName www.example.com
ServerAlias www.example.de example.de
RedirectMatch 301 (.*) https://example.com$1
</VirtualHost>
<VirtualHost *:443>
ServerName example.com
ServerAdmin webmaster@example.com
DocumentRoot /var/www/example
<Directory "/var/www/example">
AllowOverride All
AuthType Basic
AuthName "Example.com Temporary Preview"
AuthUserFile /var/www/users
Require user example-dev
</Directory>
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>
Я использую certbot
для проверки доменов и получения ssl-сертификата от letsencrypt вот так:
sudo certbot --authenticator webroot --installer apache certonly
затем выберите все домены (которые установщик apache точно угадает), указав корневой веб-сайт для процесса аутентификации в установщике interactiv cli.
(Перед процессом certbot я использую другую конфигурацию vhost для этого домена, используя только порт 80, чтобы процесс аутентификации работал)
МОЙ ВОПРОС / НЕПРАВИЛЬНОЕ ПОНЯТИЕ
Я понимаю свою конфигурацию apache vhost следующим образом:
поймать все http запросы (все домены, с www и без) и перенаправить их на https://example.com
поймать все https запросы (все домены кроме example.com
, с www и без, и перенаправить их на https://example.com
наконец поймать https запросы на example.com
и обслуживайте DocumentRoot со всей конфигурацией, как сказано в этом третьем блоке VirtualHost.
Почему браузер в некоторых случаях жалуется, что сертификат недействителен для данного домена?
Есть ли лучший / более простой способ достичь того, чего я хочу? Я неправильно понимаю концепции Apache-Redirections в этом случае (SSL, no-www, letsencrypt)? Мне не хватает какой-то части при использовании certbot
команда?
Вы получаете сертификат например.de? Даже если вы выполняете перенаправление 301, браузер сначала запрашивает SSL для домена, который перенаправляется на другой пример домена: https://www.example.de перенаправлен на https://example.com.
Итак, домен (https://www.example.de) также должен иметь действующий SSL, поскольку он сначала запрашивается браузером. Этого не будет, если вы перенаправляете не SSL http://www.example.de к https://example.com.
Поэтому убедитесь, что вы выпустили сертификат SSL для всех доменов SSL. Протестируйте эти домены без перенаправления, а затем выполните свои перенаправления.