Создание сертификата Let’s Encrypt для Apache в CentOS 8

Let’s Encrypt – это центр сертификации (ЦС), который предлагает простой способ создания и установки бесплатных сертификатов TLS/SSL, тем самым обеспечивая зашифрованные HTTPS-соединения. Let’s Encrypt упрощает процесс генерирования сертификата с помощью клиента Certbot, который автоматизирует большинство (если не все) необходимых этапов. В настоящее время весь процесс получения и установки сертификата Let’s Encrypt полностью автоматизирован как для Apache, так и для Nginx.

Читайте также: Основы OpenSSL: SSL-сертификаты, закрытые ключи и запросы на подпись

Данный мануал расскажет, как с помощью Certbot получить бесплатный сертификат для Apache в CentOS 8 и обеспечить его автоматическое обновление.

Читайте также: Автоматизация задач с помощью Cron в CentOS 8

Требования

  • Сервер CentOS 8, настроенный по этому мануалу.
  • Веб-сервер Apache, установленный по этому мануалу. В этом мануале в качестве виртуального хоста используется /etc/httpd/sites-available/example.com.conf.
  • FRDN. В этом мануале используется условный домен example.com.
  • DNS-записи А для example.com и www.example.com, указывающие на внешний IP-адрес сервера. DNS-записи A нужны Let’s Encrypt, чтобы убедиться, что вы являетесь владельцем домена, для которого выдается сертификат. Например, если вы хотите получить сертификат для example.com, этот домен должен разрешиться на ваш сервер, чтобы пройти проверку.

1: Установка Certbot

Для начала нужно установить клиент Certbot и модуль Apache mod_ssl, который обеспечивает поддержку SSLv3.

Пакет certbot невозможно установить из стандартного репозитория. Для этого вам понадобится репозиторий EPEL.

Чтобы добавить его, введите:

sudo dnf install epel-release

Теперь можно установить необходимые пакеты:

sudo dnf install certbot python3-certbot-apache mod_ssl

Certbot установлен на сервер. Теперь давайте извлечем сертификат.

2: Получение SSL-сертификата

Клиент Certbot автоматизирует многие этапы процесса. Он автоматически получит и установит новый сертификат SSL, действительный для доменов, которые вы указали в параметрах. Плагин Apache заботится о реконфигурации Apache и при необходимости перезагрузит настройки.

Чтобы использовать интерактивную установку сертификата для одного домена, введите:

sudo certbot --apache -d example.com

Эта команда запускает certbot с плагином —apache и указывает домен для сертификата через флаг -d.

Если вы хотите установить один сертификат, действительный для нескольких доменов или поддоменов, вы можете передать их этой команде в качестве дополнительных параметров, пометив каждый новый домен или поддомен флагом -d. Первым доменным именем в списке параметров должен быть базовый домен, используемый Let’s Encrypt для создания сертификата. Передайте имя базового домена (это example.com) первым в списке, а затем добавьте дополнительные субдомены или псевдонимы:

sudo certbot --apache -d example.com -d www.example.com

Утилита certbot также может предложить вам выбрать домен на основе существующей конфигурации Apache. Чтобы использовать эту функцию, вызовите certbot без каких-либо доменов:

sudo certbot --apache

Программа предоставит вам пошаговое руководство по настройке параметров сертификата. Клиент попросит вас указать адрес электронной почты для восстановления потерянного ключа и отправки уведомлений, а затем предложит вам принять условия обслуживания. Если вы не указали свои домены в командной строке, вам также будет предложено это сделать. Если в файлах виртуального хоста с помощью директивы ServerName не указан домен, вам будет предложено выбрать файл виртуального хоста.

Когда установка будет успешно завершена, вы увидите такое сообщение:

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
Your cert will expire on 2020-09-24. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
Donating to EFF:                    https://eff.org/donate-le

Сертификаты будут загружены и установлены в подкаталог /etc/letsencrypt/live.

3: Тестирование сертификатов и настройки SSL

Если вы протестируете свой сервер с помощью SSL Server Test от комапании облачной безопасности Qualys, он получит оценку A. Давайте попробуем пройти этот тест.

Откройте следующую ссылку в любом удобном веб-браузере, заменив example.com вашим доменом:

https://www.ssllabs.com/ssltest/analyze.html?d=example.com

Вы попадете на страницу, которая немедленно начнет тестирование SSL-соединения с вашим сервером.

На выполнение теста может уйти несколько минут. Статус теста обновится в вашем браузере.

Когда тестирование завершится, на странице отобразится буквенная оценка, которая определяет безопасность и качество конфигурации вашего сервера. Настройки, предложенные в этом мануале, должны получить оценку A.

Для получения дополнительной информации о том, как SSL Labs выставляет свои оценки, читайте этот пост. В нем подробно описываются обновления, внесенные в схему оценок в январе 2018 года.

Попробуйте перезагрузить свой сайт, указав https://, и обратите внимание на индикатор безопасности в браузере. Он должен указывать, что сайт надежно защищен (как правило, для этого используется зеленый замочек в адресной строке).

Сейчас ваш SSL-сертификат установлен и протестирован. Следующим шагом будет настройка автоматического продления сертификата.

4: Автоматическое обновление сертификатов

Сертификаты Let’s Encrypt действительны только в течение 90 дней. Потому лучше заранее автоматизировать процесс продления сертификата.

У клиента certbot Let Encrypt есть специальная команда для продления сертификатов, она автоматически проверяет установленные сертификаты и пытается обновить их, если срок их действия истекает менее чем через 30 дней. Используя опцию —dry-run, вы можете запустить сухой прогон этой задачи, чтобы проверить, как она работает:

sudo certbot renew --dry-run

Вывод должен выглядеть примерно так:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/example.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator apache, Installer apache
Starting new HTTPS connection (1): acme-staging-v02.api.letsencrypt.org
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for example.com
http-01 challenge for www.example.com
Waiting for verification...
Cleaning up challenges
Resetting dropped connection: acme-staging-v02.api.letsencrypt.org
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed with reload of apache server; fullchain is
/etc/letsencrypt/live/example.com/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates below have not been saved.)
Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/example.com/fullchain.pem (success)
...

Обратите внимание, если вы создали сертификат, связанный с несколькими доменами, в выходных данных будет отображаться только имя базового домена, но продление будет действительным для всех доменов, включенных в этот сертификат.

Практический способ автоматизировать обновление сертификатов – создать задачу cron, которая будет периодически запускать команду обновления.

Официальная документация Certbot рекомендует запускать cron дважды в день. Это гарантирует, что в случае, если Let Encrypt инициирует отзыв сертификата, Certbot выполнит обновление не более чем через полдня. В документации предлагается добавить следующую команду в файл /etc/crontab:

echo "0 0,12 * * * root python3 -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew -q" | sudo tee -a /etc/crontab > /dev/null

Это создаст новую задачу cron, которая будет выполняться в полдень и полночь каждый день (0 0,12 * * *). Она запустит короткий скрипт python3, который останавливается на произвольный период времени (от 0 до 60 минут). Это рекомендуется делать для того, чтобы уменьшить нагрузку на серверы Let’s Encrypt.

После выполнения скрипта python запустится команда certbot renew.

Заключение

В этом мануале вы научились устанавливать клиент certbot, загружать сертификаты SSL, тестировать их и настраивать их автоматическое обновление. Если у вас есть дополнительные вопросы по использованию Certbot, обратитесь к документации клиента или читайте блог Let’s Encrypt.

Tags: , , , , , , ,

Добавить комментарий