
Let’s Encrypt — это некоммерческий центр сертификации, управляемый Исследовательской группой по безопасности в Интернете (ISRG), который предоставляет сертификаты X.509 для шифрования транспортного уровня (TLS) бесплатно.
Сертификат действителен в течение 90 дней, в течение которых продление может иметь место в любое время. Предложение сопровождается автоматизированным процессом, предназначенным для преодоления ручного создания, проверки, подписания, установки и обновления сертификатов для защищенных веб-сайтов. Он был запущен 12 апреля 2016 года.
В этой статье мы покажем вам, как вы можете установить Let’s Encrypt сертификат для веб-сервера Apache и настроить автоматическое обновление сертификата в CentOS 8.
Установка Apache
Apache доступен в репозиториях CentOS по умолчанию.
# dnf install httpd mod_ssl
Включите и запустите службу Apache.
# systemctl enable httpd
# systemctl start httpd
Установка Certbot
# wget https://dl.eff.org/certbot-auto
# mv certbot-auto /usr/local/bin/certbot-auto
# chmod 0755 /usr/local/bin/certbot-auto
Создайте новый набор 2048-битных параметров DH для усиления безопасности.
# openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Получение Let’s Encrypt SSL сертификата
Чтобы получить SSL-сертификат для домена, мы собираемся использовать плагин Webroot, который работает путем создания временного файла для проверки запрашиваемого домена в каталоге ${webroot-path}/.well-known/acme-challenge. Сервер Let Encrypt отправляет HTTP-запросы во временный файл для проверки того, что запрашиваемый домен резолвится на сервере, где работает certbot.
Чтобы упростить настройку, мы сопоставим все HTTP-запросы для .well-known/acme-challenge to с одним каталогом /var/lib/letsencrypt.
# mkdir -p /var/lib/letsencrypt/.well-known
# chgrp apache /var/lib/letsencrypt
# chmod g+s /var/lib/letsencrypt
Создайте два файла конфигурации
# nano /etc/httpd/conf.d/letsencrypt.conf
Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/"
<Directory "/var/lib/letsencrypt/">
AllowOverride None
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
Require method GET POST OPTIONS
</Directory>
Второй файл.
# nano /etc/httpd/conf.d/ssl-params.conf
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM
# Requires Apache 2.4.36 & OpenSSL 1.1.1
SSLProtocol -all +TLSv1.3 +TLSv1.2
SSLOpenSSLConfCmd Curves X25519:secp521r1:secp384r1:prime256v1
# Older versions
# SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder On
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
# Requires Apache >= 2.4
SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
# Requires Apache >= 2.4.11
SSLSessionTickets Off
SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem"
Перезагрузите конфигурацию Apache
# systemctl reload httpd
Запустите скрипт certbot с помощью плагина webroot и получите файлы сертификатов SSL.
# /usr/local/bin/certbot-auto certonly --agree-tos --email admin@example.com --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com
Создание виртуального Хоста
По умолчанию Apache настроен на загрузку всех файлов конфигурации, заканчивающихся на .conf, из каталога /etc/httpd/conf.d/
# nano /etc/httpd/conf.d/example.com.conf
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect permanent / https://example.com/
</VirtualHost>
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
Protocols h2 http:/1.1
<If "%{HTTP_HOST} == 'www.example.com'">
Redirect permanent / https://example.com/
</If>
DocumentRoot /var/www/example.com/public_html
ErrorLog /var/log/httpd/example.com-error.log
CustomLog /var/log/httpd/example.com-access.log combined
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>
Проверка Let’s Encrypt SSL сертификата
Проверьте свой сертификат SSL на наличие проблем и его рейтинги безопасности, перейдя по указанному ниже URL-адресу.
https://www.ssllabs.com/ssltest
https://www.sslshopper.com/ssl-checker.html
Обновление Let’s Encrypt сертификата
Сертификат Let Encrypt действителен в течение 90 дней с даты выдачи и должен быть продлен до истечения срока его действия.
Выполните следующую команду, чтобы создать новый cronjob, который обновит сертификат и перезапустит Apache.
# echo "0 0,12 * * * root python3 -c 'import random; import time; time.sleep(random.random() * 3600)' && /usr/local/bin/certbot-auto -q renew --renew-hook \"systemctl reload httpd\"" | sudo tee -a /etc/crontab > /dev/null
Вы также можете смоделировать процесс продления сертификата с помощью приведенной ниже команды.
# /usr/local/bin/certbot-auto renew --dry-run
В этом руководстве мы продемонстрировали, как вы можете использовать certbot для установки и настройки сертификата Let’s Encrypt на веб-сервере Apache, работающем в системе CentOS 8.
