UMGUM.COM 

Let‘s Encrypt + Apache2 ( Настройки подсистемы получения и автоматического обновления сертификатов "Let's Encrypt" для web-сервера "Apache2". )

16 октября 2018

OS: "Linux Debian 7/8/9 (Wheezy/Jessie/Stretch)", "Linux Ubuntu 14/16/18 LTS", "Linux Fedora 23/24/25".
Application: "Certbot client v.0.12/0.26" for "Let`s Encrypt" (on Python), "Apache2".

Основная инструкция по настройке "Let`s Encrypt" в спарке с web-сервером "Nginx" и опубликована отдельно. Здесь рассматриваются лишь отличия от неё в плане интеграции с web-сервером "Apache2".


Предварительная настройка web-сервера "Apache2".

Считая, что локальная директория для валидационных файлов "Certbot client"-а уже создана в соответствии с основной инструкцией, описываем для web-сервера "Apache2" виртуальную ссылку с зарезервированным ISRG именем "/.well-known/acme-challenge/", которую связываем с локальной файловой структурой:

# mkdir -p /etc/apache2/snippets
# vi /etc/apache2/snippets/letsencrypt.conf

Alias /.well-known/acme-challenge/ "/var/www/letsencrypt/.well-known/acme-challenge/"
<Directory "/var/www/letsencrypt/">
  AllowOverride None
  Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
</Directory>

В описании каждого сайта, которому требуется поддержка "Let`s Encrypt", внедряем заготовленный блок конфигурации ресурсов:

# vi /etc/apache2/sites-enabled/example.net.conf

# Описание рабочего окружения доступного по HTTP web-сайта как такового
<VirtualHost example.net:80>
  ServerName example.net
  ServerAlias www.example.net

  # Возможный блок перехвата трафика HTTP и перенаправления его в HTTPS
  RewriteEngine on
  RewriteCond %{REQUEST_URI} !/\.well-known
  RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]

  # Включение конфигурации директории верификации "Let`s Encrypt"
  Include /etc/apache2/snippets/letsencrypt.conf
</VirtualHost>

Если поддержка "Let`s Encrypt" нужна всем сайтам web-сервера, то проще вынести объявление символического ресурса в глобальный для web-сервера "Apache2" контекст:

# ln -s /etc/apache2/snippets/letsencrypt.conf /etc/apache2/conf.d/letsencrypt.conf

Проверяем корректность конфигурации и применяем таковую:

# apachectl -t
# /etc/init.d/apache2 reload

Применение сертификатов "Let`s Encrypt" в web-сервисе.

Считая, что SSL-сертификаты уже запрошены в соответствии с базовой инструкцией, применяем их в конфигурации сайтов, публикуемых web-сервером "Apache2", примерно следующим образом:

# vi /etc/apache2/sites-enabled/example.net.conf

....
# Перехват запросов к имени нежелательного формата и перенаправление к нужному
<VirtualHost www.example.net:443>
  ServerName www.example.net
  Redirect permanent / https://example.net/

  <IfModule mod_ssl.c>
    # Рекомендуемые обобщённые настройки протокола
    SSLEngine on
    SSLProtocol all -SSLv2
    SSLHonorCipherOrder on
    SSLCipherSuite HIGH:MEDIUM:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4:!aECDH:+SHA1:+MD5:+HIGH:+MEDIUM
    SSLOptions +StrictRequire
    SSLCompression off

    # Сертификаты Let`s Encrypt
    SSLCertificateFile       /etc/letsencrypt/live/www.example.net/fullchain.pem
    SSLCertificateKeyFile    /etc/letsencrypt/live/www.example.net/privkey.pem
    SSLCertificateChainFile  /etc/letsencrypt/live/www.example.net/chain.pem
  </IfModule>
</VirtualHost>

# Описание рабочего окружения доступного по HTTPS web-сайта как такового
<VirtualHost example.net:443>
  ServerName example.net
  ....

  <IfModule mod_ssl.c>
    # Рекомендуемые обобщённые настройки протокола
    SSLEngine on
    SSLProtocol all -SSLv2
    SSLHonorCipherOrder on
    SSLCipherSuite HIGH:MEDIUM:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4:!aECDH:+SHA1:+MD5:+HIGH:+MEDIUM
    SSLOptions +StrictRequire
    SSLCompression off

    # Сертификаты Let`s Encrypt
    SSLCertificateFile       /etc/letsencrypt/live/example.net/fullchain.pem
    SSLCertificateKeyFile    /etc/letsencrypt/live/example.net/privkey.pem
    SSLCertificateChainFile  /etc/letsencrypt/live/example.net/chain.pem
  </IfModule>

  ....
</VirtualHost>

Проверяем корректность конфигурации и применяем таковую:

# apachectl -t
# /etc/init.d/apache2 reload

Автоматизация продления сертификатов.

Общая идея и способ реализации автоматического продления сертификатов рассматривается в основной инструкции, а здесь лишь приводится специфичная для "Apache2" команда применения обновлённой конфигурации:

# vi /opt/eff.org/cert-renew.sh

#!/bin/bash
....
# Даём указание использующему сертификаты web-сервису перечитать конфигурацию
[ -x "$(command -v apachectl)" ] && apachectl -t > /dev/null 2>&1 && { apachectl -k graceful; }
....


Заметки и комментарии к публикации:


Оставьте свой комментарий ( выразите мнение относительно публикации, поделитесь дополнительными сведениями или укажите на ошибку )