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

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

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

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

В мануале мы используем не стандартный, а пользовательский виртуальный хост. Рекомендуем вам начинать со свежей установки веб-сервера, поскольку это позволит избежать общих ошибок и сохранить стандартные файлы в качестве резервной конфигурации.

Требования

  • Сервер Ubuntu 20.04, настроенный по этому мануалу.
  • FRDN. В этом мануале используется условный домен your_domain.
  • DNS-записи А для your_domain и www.your_domain, указывающие на внешний IP-адрес сервера.
  • Веб-сервер Apache, установленный по этому мануалу. В этом мануале в качестве виртуального хоста используется /etc/apache2/sites-available/your_domain.conf.

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

Для начала нужно установить клиент Certbot. Этот пакет можно установить из стандартного репозитория Ubuntu.

В целом сейчас нам понадобятся два пакета: certbot и python3-certbot-apache. Последний пакет – это плагин, который обеспечивает интеграцию Certbot и Apache, благодаря чему вы сможете автоматизировать получение сертификата и настройку HTTPS на вашем веб-сервере с помощью одной команды.

sudo apt install certbot python3-certbot-apache

Чтобы подтвердить установку, нажмите Y и Enter.

Certbot установлен на сервер. Теперь давайте проверим конфигурацию Apache, чтобы убедиться, что ваш виртуальный хост настроен правильно. Нам нужно убедиться, что клиентский скрипт certbot сможет обнаружить ваши домены и автоматически перенастроить веб-сервер для использования нового SSL-сертификата.

2: Проверка виртуального хоста Apache

Чтобы иметь возможность автоматически получать и настраивать SSL-сертификаты для вашего веб-сервера, Certbot должен найти правильный виртуальный хост в конфигурации Apache. Он извлекает доменные имена из директив ServerName и ServerAlias, определенных в блоке конфигурации VirtualHost.

Если вы выполнили настройку виртуального хоста согласно этому мануалу по установке Apache, на данный момент у вас должен быть VirtualHost для вашего домена в /etc/apache2/sites-available/your_domain.conf, в котором директивы ServerName и ServerAlias, уже установлены соответствующим образом.

Чтобы проверить это, откройте файл виртуального хоста вашего домена с помощью nano или другого текстового редактора:

sudo nano /etc/apache2/sites-available/your_domain.conf

Найдите строки ServerName и ServerAlias. Они должны выглядеть так:

...
ServerName your_domain
ServerAlias www.your_domain
...

Если вы уже правильно настроили ServerName и ServerAlias​​, вы можете выйти из текстового редактора и перейти к следующему разделу мануала (в nano для этого нужно нажать Ctrl + X, Y и Enter).

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

Вы должны получить ОК в ответ. Если вы получили ошибку, снова откройте файл виртуального хоста и проверьте наличие опечаток или пропущенных символов. Исправив ошибки, перезагрузите Apache, чтобы изменения вступили в силу:

sudo systemctl reload apache2

Теперь Certbot сможет найти правильный блок VirtualHost и обновить его.

3: Настройка брандмауэра

Если на сервере включен брандмауэр ufw, вам нужно настроить его для поддержки соединений HTTPS.

Во время установки Apache регистрирует в ufw несколько профилей. Просмотреть текущие настройки можно с помощью команды:

sudo ufw status

Если вы следовали мануалу по установке Apache, вы получите такой результат:

Status: active
To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Apache                     ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Apache (v6)                ALLOW       Anywhere (v6)

Чтобы разблокировать трафик HTTPS, активируйте профиль Apache Full и удалите профиль Apache.

sudo ufw allow 'Apache Full'
sudo ufw delete allow 'Apache'

Теперь параметры брандмауэра будут выглядеть так:

sudo ufw status
Status: active
To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Apache Full                ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Apache Full (v6)           ALLOW       Anywhere (v6)

Теперь пора запустить Certbot и получить сертификаты.

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

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

sudo certbot --apache

Если вы запускаете certbot впервые, вам будет предложено ввести адрес электронной почты, который будет использоваться для отправки уведомлений об обновлениях и ошибках:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): you@your_domain

Введите адрес и нажмите Enter. После этого вам будет предложено принять условия использования Let’s Encrypt. Для этого нажмите А и Enter:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

Затем certbot спросит, хотите ли вы поделиться своим адресом электронной почты с Electronic Frontier Foundation, чтобы получать рассылку с новостями и объявлениями. Если вы не хотите подписываться на рассылку, введите N. В противном случае введите Y и нажмите Enter.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N

На следующем этапе Certbot спросит, для каких доменов вы хотите активировать HTTPS. Перечисленные домены автоматически извлекутся из конфигурации виртуального хоста Apache, поэтому важно убедиться, что в вашем виртуальном хосте указаны правильные параметры ServerName и ServerAlias. Если вы хотите включить HTTPS для всех перечисленных доменных имен (что рекомендуется), вы можете оставить командную строку пустой и нажать Enter, чтобы продолжить. В противном случае выберите домены, для которых вы хотите включить HTTPS, разделив их запятыми и/или пробелами, и нажмите Enter.

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: your_domain
2: www.your_domain
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):

Вы получите такой вывод:

Obtaining a new certificate
Performing the following challenges:
http-01 challenge for your_domain
http-01 challenge for www.your_domain
Enabled Apache rewrite module
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/apache2/sites-available/your_domain-le-ssl.conf
Enabled Apache socache_shmcb module
Enabled Apache ssl module
Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf
Enabling available site: /etc/apache2/sites-available/your_domain-le-ssl.conf
Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf

Далее вам будет предложено указать, хотите ли вы, чтобы HTTP-трафик перенаправлялся на HTTPS. На практике это означает, что когда кто-то посещает ваш сайт по незашифрованным каналам (HTTP), они будут автоматически перенаправлены на HTTPS-адрес вашего сайта. Выберите 2, чтобы включить перенаправление, или 1, если вы хотите оставить HTTP и HTTPS.

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

После этого настройка Certbot будет завершена, и вам будут представлены последние замечания о вашем новом сертификате: здесь вы узнаете, где найти сгенерированные файлы и как протестировать вашу конфигурацию с помощью внешнего инструмента, который анализирует подлинность вашего сертификата:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://your_domain and
https://www.your_domain
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=your_domain
https://www.ssllabs.com/ssltest/analyze.html?d=www.your_domain
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/your_domain/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/your_domain/privkey.pem
Your cert will expire on 2020-07-27. 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

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

Если вы протестируете свой сервер с помощью SSL Labs Server Test, он получит оценку A.

Теперь давайте протестируем процесс обновления сертификата.

5: Проверка автоматического обновления сертификата

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

Клиент certbot обрабатывает обновления с помощью добавленного в /etc/cron.d сценария (он управляется сервисом systemctl по имени certbot.timer). Этот скрипт запускается два раза в день и автоматически обновляет сертификат, срок действия которого истекает через тридцать дней.

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

sudo systemctl status certbot.timer

Вы получите такой вывод:

certbot.timer - Run certbot twice daily
Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Tue 2020-04-28 17:57:48 UTC; 17h ago
Trigger: Wed 2020-04-29 23:50:31 UTC; 12h left
Triggers: ● certbot.service
Apr 28 17:57:48 fine-turtle systemd[1]: Started Run certbot twice daily.

Чтобы протестировать процесс обновления, запустите сухой прогон:

sudo certbot renew --dry-run

Если вы не видите ошибок, значит, все настроено правильно. При необходимости Certbot обновит ваши сертификаты и перезагрузит Apache, чтобы активировать изменения. Если процесс автоматического обновления не срабатывает, Let’s Encrypt отправит сообщение на указанный вами адрес электронной почты, предупредив вас о завершении срока действия вашего сертификата.

Заключение

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

Tags: , , , , ,