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