url image

Как установить бесплатный сертификат Let’s Encrypt и настроить автоматический перевыпуск

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

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

После выпуска и установки SSL-сертификата сайт начнет работу по HTTPS-протоколу (т.е. защищенному HTTP), порт уже будет не 80, а 443 — это порт HTTPS, с которым свободно работает браузер без необходимости указывать его в адресной строке.

В этой статье мы расскажем, как получить SSL-сертификат Let’s Encrypt и настроить его перевыпуск с помощью утилиты Certbot.

Устанавливаем Certbot с плагином для веб-сервера

Чтобы SSL-сертификат от Let’s Encrypt можно было выпустить и автоматически установить в конфигурацию веб-сервера, потребуется установить специальную утилиту — Certbot, а также один из её плагинов в зависимости от используемого веб-сервера. 

Debian/Ubuntu

Перед установкой желательно выполнить команду apt update.

Если используется Apache:

apt install certbot python3-certbot-apache

Если используется Nginx:

apt install certbot python3-certbot-nginx

CentOS 7

yum install epel-release

Если используется Apache:

yum install certbot certbot-apache

Если используется Nginx:

yum install certbot certbot-nginx

Certbot можем считать установленным, однако это ещё не всё. Так как мы планируем настроить автоматическое встраивание SSL-сертификата в конфигурацию Apache или Nginx, необходимо проверить конфигурационный файл (виртуальный хост) на наличие и корректность интересующих нас строк.

Настраиваем виртуальный хост Apache или Nginx

Когда Certbot будет выполнять автоматическую установку SSL-сертификата, его плагину потребуется найти в конфигурационных файлах Apache или Nginx конкретные строки, чтобы внести необходимые изменения. Поэтому предварительно нужно убедиться в их наличии и корректности. Так что на этом этапе мы вручную найдём и проверим директивы ServerName и ServerAlias (в случае Apache) или server_name (в случае Nginx) с указанием соответствующего домена, для которого будем выпускать и устанавливать SSL.

Например, в случае Apache виртуальный хост может размещаться здесь:

/etc/httpd/conf.d/default.conf (для CentOS)

/etc/apache2/conf.d/default.conf (для Debian/Ubuntu, далее в примерах для Apache будет указан путь только в варианте для CentOS, но на Debian/Ubuntu процедура аналогична, нужно только заменить httpd на apache2)

Более точно можно посмотреть с помощью команды:

apachectl -S 

Она выведет список всех виртуальных хостов, и в скобках будет указан путь до конфигурационного файла виртуального хоста.

В случае Nginx виртуальный хост может размещаться здесь:

/etc/nginx/sites-available/example.com.conf 

Проверим содержимое файла конфигурации, открыв его в nano или другом текстовом редакторе:

В случае Apache:

vi /etc/httpd/conf.d/default.conf

В случае Nginx:

nano /etc/nginx/sites-available/example.com.conf

Проверяем, что в файле содержится строка ServerName и ServerAlias (в случае Apache) или server_name (в случае Nginx). 

Пример отрывка корректного содержимого виртуального хоста:

в случае  /etc/httpd/conf.d/default.conf

...
    ServerName example.com 
    ServerAlias www.example.com
    ...

в случае /etc/nginx/sites-available/example.com

...
    server_name example.com www.example.com;
    ...

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

Финальная проверка — проверяем синтаксис в файлах конфигурации:

В случае Apache:

apachectl configtest

В случае Nginx:

nginx -t

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

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

В случае Apache:

systemctl restart httpd

Напомню, в Debian/Ubuntu httpd заменяем на apache2, поэтому команда будет иметь вид: systemctl restart apache2.

В случае Nginx:

systemctl reload nginx

Теперь плагин Certbot при автоматической установке найдет нужные строки и проведет необходимые изменения для установки сертификата Let'sEncrypt.

Выпускаем SSL-сертификат Let’s Encrypt

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

Без плагина настроить перевыпуск не получится, выполнится только выпуск

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

В случае Apache:

certbot --apache -d testpanel.fvds.ru -d www.testpanel.fvds.ru

В случае Nginx:

certbot --nginx -d example.com -d www.example.com

Произойдет запуск Certbot с плагином --apache или --nginx, опция -d необходима чтобы обозначить доменные имена, для которых мы хотим получить сертификат Let’s Encrypt.

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

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

После успешного подтверждения утилита предложит выбрать дополнительную опцию для установки:

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):

Выбирая первый вариант,  мы просим не добавлять редирект с http:// на https:// для вашего сайта. Он подходит для случаев, когда редирект не требуется либо когда вы планируете добавить его самостоятельно.

Во втором варианте, помимо внесения в виртуальный хост строк о SSL-сертификате, утилита добавит строки, необходимые для работы редиректа с http:// на https://.

Когда выберете предпочитаемый вариант, нажмите Enter. Виртуальный хост будет обновлён, а веб-сервер перезапустится для применения новых параметров. На этом Certbot завершает работу и выводит текст, в котором сообщает об успешном выпуске и указывает полный путь до файлов сертификата Let’s Encrypt:

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-08-18. 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"
     - 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

Вот и всё, теперь сертификат Let’s Encrypt установлен! Проверьте ваш веб-сайт в браузере, добавив в адресной строке https:// (если выбирали опцию без редиректа), на наличие замка в адресной строке браузера. Наличие этого индикатора означает, что ваш сайт защищён.

Наверняка вы знаете, что сертификаты не бесконечны и выпускаются лишь на определенный срок. В случае Let’s Encrypt — это 90 дней. Чтобы не выполнять процедуру перевыпуска каждые 90 дней вручную, перейдем к этапу автоматического обновления сертификата.

Настраиваем автоматический перевыпуск сертификата

Если у вас Debian/Ubuntu, то Certbot  в состоянии выполнять автоматический перевыпуск, добавляя в systemd специальный таймер, который по умолчанию настроен на запуск два раза в день, чтобы утилита могла проверять все сертификаты и автоматически перевыпускать те из них, которые истекают менее чем через 30 дней.

Проверим статус таймера с помощью команды systemctl:

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 Mon 2020-05-04 20:04:36 UTC; 2 weeks 1 days ago
        Trigger: Thu 2020-05-21 05:22:32 UTC; 9h left
       Triggers: ● certbot.service
    

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

certbot renew --dry-run

В случае CentOS нам нужно самостоятельно внести задание в планировщик cron командой:

crontab -e

Добавляем на новую строку задание в таком виде:

30 4 * * * /usr/bin/certbot renew --quiet

В задании указано, что запуск проверки необходимости перевыпуска сертификата будет происходить ежедневно в 4:30 ночи по серверному времени. Вы можете корректировать это задание на периодичность и время запуска по своему усмотрению.

Если при перевыпуске «вхолостую» ошибок нет, то и при перевыпуске по заданию (в таймере или планировщике) Certbot продлит SSL-сертификаты, когда они будут истекать, а также внесёт изменения в виртуальных хост веб-сервера и перезапустит его для применения изменений. 

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

Выпуск Wildcard сертификата

Сейчас рассмотрим выпуск Wildcard сертификата, данный тип сертификатов позволяет защищать не только домен второго уровня, но и все поддомены, связанные с ним. К примеру, если на сервере установлено несколько сайтов и все необходимо подключить к SSL, то необязательно выпускать на каждый домен по одному сертификату: lamp.fvds.ru, www.lamp.fvds.ru, shop.lamp.fvds.ru, forum.lamp.fvds.ru — можно обойтись только одним Wildcard.

Стоит обратить внимание на то, что данный тип сертификата Wildcard требует обязательную проверку по DNS записи TXT. При запуске процедуры выпуска сертификата Certbot запросит два раза добавить TXT-запись с разными значениями.

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

Запускаем команду:

certbot --manual --agree-tos --manual-public-ip-logging-ok --preferred-challenges dns certonly --server https://acme-v02.api.letsencrypt.org/directory -d *.lamp.fvds.ru -d lamp.fvds.ru

Замените значения на свои: *.lamp.fvds.ru и lamp.fvds.ru

Пример: *.domain.ru и domain.ru.

После запуска команды вывод будет следующим:

Please deploy a DNS TXT record under the name

_acme-challenge.lamp.fvds.ru with the following value:

RYHdWpSmMuVjdJFZT9JGBs7zuQOFgN78f1Azt1fwNcc

Before continuing, verify the record is deployed.

Это означает, что сейчас требуется создать TXT ресурсную запись для доменного имени в DNS.

Имя: _acme-challenge.lamp.fvds.ru

Значение: RYHdWpSmMuVjdJFZT9JGBs7zuQOFgN78f1Azt1fwNcc

Если домен делегирован на сервера имён FirstVDS, можете перейти в DNSmanager и создать ресурсную запись, ориентируясь по прикреплённым скриншотам:

После сохранения записи результат должен быть таким:

Как только создадим запись, возвращаемся в терминал и нажимаем «Enter» для того, чтобы продолжить выпуск. Обязательно обратите внимание на то, что Certbot запросит создание второй TXT записи — нужно создать её аналогичным образом и завершить выпуск.

Сертификат также сохранится в указанной директории: /etc/letsencrypt/live

По завершении выпуска сертификата рекомендуем изучить наши статьи по его установке на домен и для почты. Отметим, что при использовании автовыпуска сертификатов (не Wildcard) с плагинами для Apache или Nginx, установка сертификата на домен происходит автоматически.

Если ваш сервер работает с панелью управления ispmanager, можете выпустить такой же сертификат по инструкции.

Этот материал был полезен?

Скидка 25% новым клиентам!
Закажи сервер сегодня и получи скидку на первый месяц аренды!