Site icon 8HOST.COM

Создание сертификата 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

Требования

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.