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

Apache HTTPD иногда обслуживает старые / просроченные сертификаты

У меня три хоста на одном сервере (один IP):

Предполагается, что каждый из них будет использовать сертификат Let's Encrypt, недавно выпущенный в апреле 2017 года.

Тем не мение, время от времени сервер, кажется, обслуживает старые (просроченные) сертификаты. В случае domain1.com, фактически все еще действующий сертификат StartSSL (07.2016 - 07-2017) обслуживается, в то время как два других хоста обслуживают сертификаты Let's Encrypt с истекшим сроком действия с января 2017 года.

Вот как каждый из этих хостов в основном настроен (с разными именами хостов, конечно) для certbot:

<VirtualHost *:443>

    ServerName  domain1.com
    ServerAlias www.domain1.com

    SSLEngine           on
    SSLProtocol         all -SSLv2 -SSLv3
    SSLCipherSuite      ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
    SSLHonorCipherOrder on
    SSLCompression      off

    SSLOptions +StrictRequire

    SSLCertificateFile /etc/letsencrypt/live/domain1.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/domain1.com/privkey.pem

    DocumentRoot /opt/lucee/tomcat/webapps/domain1.com/

    <IfModule mod_headers.c>
        RequestHeader set HTTPS "1"
    </IfModule>
    <IfModule mod_proxy.c>
        ProxyPassMatch ^/(.*)$ http://127.0.0.1:8500/$1
    </IfModule>

    CustomLog ${APACHE_LOG_DIR}/access_kwaschny.log custom_access

</VirtualHost>

fullchain.pem и privkey.pem являются символическими ссылками и указывают на самые последние файлы (самый высокий индекс) в archive папка для каждого хоста. Я решил ссылки, и вроде нормально.

apache2ctl -S

VirtualHost configuration:
*:80                   is a NameVirtualHost
         default server localhost (/etc/apache2/sites-enabled/000-default.conf:1)
         port 80 namevhost localhost (/etc/apache2/sites-enabled/000-default.conf:1)
         port 80 namevhost domain1.com (/etc/apache2/sites-enabled/000-default.conf:8)
                 alias www.domain1.com
         port 80 namevhost mmosvc.com (/etc/apache2/sites-enabled/000-default.conf:17)
                 alias www.mmosvc.com
         port 80 namevhost domain3.com (/etc/apache2/sites-enabled/000-default.conf:26)
                 alias www.domain3.com
         port 80 namevhost www.domain2.com (/etc/apache2/sites-enabled/000-default.conf:35)
                 alias domain2.com
         port 80 namevhost forum.domain2.com (/etc/apache2/sites-enabled/000-default.conf:44)
         port 80 namevhost downloads.domain2.com (/etc/apache2/sites-enabled/000-default.conf:69)
         port 80 namevhost images.domain2.com (/etc/apache2/sites-enabled/000-default.conf:82)
*:443                  is a NameVirtualHost
         default server domain1.com (/etc/apache2/sites-enabled/001-domain1.com.conf:3)
         port 443 namevhost domain1.com (/etc/apache2/sites-enabled/001-domain1.com.conf:3)
                 alias www.domain1.com
         port 443 namevhost www.domain2.com (/etc/apache2/sites-enabled/002-www.domain2.com.conf:3)
                 alias domain2.com
         port 443 namevhost domain3.com (/etc/apache2/sites-enabled/003-domain3.com.conf:3)
                 alias www.domain3.com
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex default: dir="/var/lock/apache2" mechanism=fcntl
Mutex mpm-accept: using_defaults
Mutex watchdog-callback: using_defaults
Mutex rewrite-map: using_defaults
Mutex ssl-stapling-refresh: using_defaults
Mutex ssl-stapling: using_defaults
Mutex proxy: using_defaults
Mutex ssl-cache: using_defaults
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33
Group: name="www-data" id=33

сертификаты certbot

-------------------------------------------------------------------------------
Found the following certs:
  Certificate Name: www.domain2.com
    Domains: www.domain2.com
    Expiry Date: 2017-07-02 23:03:00+00:00 (VALID: 75 days)
    Certificate Path: /etc/letsencrypt/live/www.domain2.com/fullchain.pe                                                  m
    Private Key Path: /etc/letsencrypt/live/www.domain2.com/privkey.pem
  Certificate Name: domain3.com
    Domains: domain3.com
    Expiry Date: 2017-07-02 23:01:00+00:00 (VALID: 75 days)
    Certificate Path: /etc/letsencrypt/live/domain3.com/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/domain3.com/privkey.pem
  Certificate Name: domain1.com
    Domains: domain1.com
    Expiry Date: 2017-07-02 23:03:00+00:00 (VALID: 75 days)
    Certificate Path: /etc/letsencrypt/live/domain1.com/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/domain1.com/privkey.pem
-------------------------------------------------------------------------------

В чем может быть проблема? Я всегда предполагал, что сервер возвращает несколько сертификатов из-за SNI, но почему Apache HTTPD смешивает разные сертификаты? Откуда они вообще берутся? (И да, я перезапускал и перезагружал Apache несколько раз.)

Я нашел причину. У меня было несколько запущенных экземпляров Apache. Перезапуск / перезагрузка через терминал перезапустили только некоторые из них. Это объясняет, почему иногда обслуживались старые сертификаты, а иногда - новые. Мне пришлось убить все процессы, чтобы получить новые сертификаты, и теперь он снова работает.