Тариф успешно добавлен в корзину
В корзину
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 отправит сообщение на указанный ранее адрес электронной почты (который вы указали при первом запуске клиента) с предупреждением о том, что выпуск сертификата не был осуществлён, а текущий сертификат истекает.

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

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