Назад | Перейти на главную страницу

Неверный (первый / по умолчанию) SSL-сертификат обслуживает Apache 2.4 - многодоменный веб-сервер Ubuntu 18.04

Задний план: Мы перенесли 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.