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

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

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

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

Требования

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

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

Для начала нужно установить клиент Certbot.

На момент написания этой статьи Certbot недоступен в репозиториях Debian по умолчанию. Чтобы загрузить программное обеспечение с помощью apt, нужно добавить репозиторий backports в файл sources.list, где apt ищет источники пакетов. Backports – это пакеты тестовых и нестабильных дистрибутивов Debian, которые перекомпилируются, поэтому они будут работать без новых библиотек в стабильных дистрибутивах Debian.

Чтобы добавить репозиторий backports, откройте (или создайте) файл sources.list в каталоге / etc / apt /::

sudo nano /etc/apt/sources.list

Добавьте в конец файла:

. . .
deb http://ftp.debian.org/debian stretch-backports main

Этот репозиторий включает в себя основные пакеты, совместимые с Debian Free Software Guidelines (DFSG), а также компоненты non-free и contrib, которые либо не совместимы с DFSG, либо включают зависимости.

Сохраните и закройте файл, а затем обновите индекс пакетов:

sudo apt update

Теперь установите пакет certbot для Apache. Флаг –t включает установку из backports-репозитория, который вы только что добавили.

sudo apt install python-certbot-apache -t stretch-backports

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

2: Настройка SSL-сертификата

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

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

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

sudo nano /etc/apache2/sites-available/example.com.conf

Найдите строку ServerName:

...
ServerName example.com;
...

Если она выглядит так, можете закрыть редактор.

Если нет, вам нужно обновить ее. Укажите в ней свой домен, а затем сохраните и закройте файл. После этого нужно проверить синтаксис конфигурации.

sudo apache2ctl configtest
Syntax OK

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

Если ошибок в конфигурации нет, перезапустите веб-сервер.

sudo systemctl reload apache2

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

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

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

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

sudo ufw status

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

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

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

sudo ufw allow 'WWW Full'
sudo ufw delete allow 'WWW'

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

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

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

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

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

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

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

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

Если проверка пройдет успешно, certbot спросит, как вы хотите настроить 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):

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

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 2018-12-04. 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 действительны только в течение девяноста дней. Потому пользователи должны автоматизировать процесс продления сертификата. Установленный вами пакет certbot позаботится об этом, добавив сценарий обновления в /etc/cron.d. Этот скрипт запускается два раза в день и автоматически обновляет сертификат, срок действия которого истекает через тридцать дней.

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

sudo certbot renew --dry-run

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

Заключение

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

Tags: , , , , , , ,