Канонический хост Apache с одним сертификатом SSL для с www. и без

Используя SNI, существует несколько доменов с собственными сертификатами SSL (LetsEncrypt) на одном IP-адресе. . Для одного из основных доменов, скажем так https: //thedomain.tld , посещение https: //www.thedomain.tld приводит к ошибке браузера (неверное соответствие SSL сертификат) вместо обслуживания контента для www.thedomain.tld или перенаправления. Я пробовал это разными способами. Пример:

<IfModule mod_ssl.c>
  <VirtualHost 0.0.0.1:443>
    ServerName              domain.tld
    ServerAlias             www.domain.tld

    DocumentRoot            /var/www/domain.tld/
    ...

    SSLEngine               on
    SSLCertificateFile      /etc/letsencrypt/live/domain.tld/cert.pem
    ...

    <Directory /var/www/domain.tld>
            Options         -ExecCGI -Indexes -Includes +FollowSymLinks
            AllowOverride   FileInfo AuthConfig

            RewriteEngine   on
            RewriteBase     /
            RewriteCond     %{HTTP_HOST} ^www\.(.*)$ [NC]
            RewriteRule     ^/(.*)$ https://%1/$1 [R=301,L]
    ...

Версия: Apache 2.4.18

Боковое примечание: Один сервер, это отлично работает (выделенный Ubuntu 16.04). С другой стороны (Amazon Ubuntu 16.04), его способность перенаправлять или ссылаться или что-то еще с www и без него не существует.

0
задан 5 April 2018 в 06:25
2 ответа

Мне удалось решить эту проблему, взломав перенаправление с использованием двух сертификатов SSL. Это не мой предпочтительный метод, но сейчас он работает.

www. является официальным для этого веб-сайта, поэтому вот что я сделал:

  • выпустил еще один сертификат для domain.tld
  • blanket redirect https: //domain.tld на https: //www.domain.tld

    
      ServerName domain.tld
      DocumentRoot /var/www/domain.tld
    
      SSLEngine включен
      SSLCertificateFile /etc/letsencrypt/live/domain.tld/cert.pem
     ...
    
      RedirectMatch 301 (. *) Https: //www.domain.tld$1
     
     
      Имя сервера www.domain.tld
     ...
     
0
ответ дан 5 December 2019 в 06:20

Перво-наперво, если вы обслуживаете http: //www.thedomain.tld вообще, я рассмотрит возможность перенаправления его на https: //thedomain.tld . Это решает проблему для пользователей, вводящих www.thedomain.tld в своем браузере (но не решает ее для пользователей, которые вводят https: или уже имеют ссылки / закладки https или вынуждены переходить на https браузерами / HSTS).

Если если вы не обслуживаете простой http, то, к сожалению, вам либо нужен сертификат, содержащий либо www.thedomain.tld, либо * .thedomain.tld в поле сертификата SAN (или поле CN, если SAN отсутствует).

Нет никакого способа вы можете обойти это с помощью всего, что производит Apache. Первое, что получает браузер после TCP-соединения, - это сертификат. Если SAN / CN не соответствует точно тому имени хоста, которое хочет браузер, игра окончена. Браузер отображает предупреждение и даже не отправляет http-запрос, поэтому Apache никогда не пытается ответить.

Перенаправление все равно не происходит.

Если вы получаете сертификат www.thedomain.tld отдельно от thedomain.tld сертификат, вам нужно поместить отдельное имя сервера в отдельный виртуальный хост Apache. Но это создает проблемы с обслуживанием.

Я бы рекомендовал один сертификат (поле SAN может содержать много имен), и тогда конфигурация ServerName + ServerAlias ​​будет работать, как вы указали.

0
ответ дан 5 December 2019 в 06:20

Теги

Похожие вопросы