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 [email protected] --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/ssltesthttps://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.