Let’s Encrypt – бесплатный сервис выдачи SSL (Secure Sockets Layer) и TLS (Transport Layer Security) сертификатов, которые обеспечивают шифрование данных между сервером и браузером пользователя. Эти сертификаты гарантируют защищённое соединение, обеспечивая конфиденциальность передаваемой информации и защиту от перехвата данных.
Что делает Let’s Encrypt особенно удобным и популярным, так это то, что сертификаты выдаются бесплатно. Это позволяет даже малым веб-сайтам и проектам обеспечивать безопасное соединение без дополнительных затрат. Кроме того, Let’s Encrypt предлагает автоматическое обновление сертификатов, что упрощает поддержку безопасности веб-сервера, минимизируя риски уязвимостей из-за устаревших сертификатов.
В настоящей статье рассмотрим процесс установки сертификата Let’s Encrypt на VDS, работающий под управлением Ubuntu 22.04, на котором функционирует веб-сервер Apache.
Предварительная настройка
В нашем примере мы используем виртуальный сервер под управлением Ubuntu 22.04, на котором проведены подготовительные работы в части добавления учётной записи с полномочиями администратора и настройки брандмауэра UFW. Обратите внимание, что все действия в данном мануале производятся с использованием административной учётной записи, не обладающей привилегиями суперпользователя. Для повышения привилегий нашего пользователя до уровня root при выполнении команд, требующих повышенных прав доступа, мы применяем утилиту sudo
. Это делается для предотвращения случайных ошибок или злонамеренных атак.
Также на нашем тестовом VPS установлен и настроен веб-сервер Apache, под управлением которого функционирует виртуальный хост с доменным именем your-domain.host
. Доступ к тестовой странице осуществляется с использованием протокола HTTP, то есть через порт 80.

Кроме того, при помощи команды apachectl -M
необходимо проверить наличие установленных модулей Apache. Для того, чтобы убедиться, что на сервере установлен модуль SSL, запустите следующую команду:
$ apachectl -M | grep ssl
Отсутствие какого-либо вывода говорит о том, что модуль SSL в системе не установлен. При этом в нашем примере выполнение команды указывает на ошибку следующего вида:

Данное сообщение говорит о том, что Apache не может найти валидную директиву ServerName в файле конфигурации, поэтому будет использовать первый обнаруженный IP-адрес. Именно он и указан в сообщении об ошибке.
Для устранения данной ошибки необходимо добавить ServerName в конфигурацию Apache. Для этого в конец файла /etc/apache2/apache2.conf
добавьте строку ServerName 127.0.0.1
.
$ cd /etc/apache2
$ sudo nano apache2.conf

После чего закройте конфигурационный файл с сохранением внесённых изменений. Затем проверьте наличие ошибок в обновлённой конфигурации Apache при помощи команды:
$ sudo apachectl configtest

Для применения внесённых изменений перезапустите веб-сервер:
$ sudo systemctl restart apache2
После чего повторно проверьте отсутствие сообщения об ошибке и установленного модуля SSL с помощью команды:
$ apachectl -M | grep ssl
Установка клиентской утилиты и сертификата Let’s Encrypt
Для автоматизации процесса получения и обновления SSL/TLS сертификатов от удостоверяющего центра Let’s Encrypt используется утилита Certbot. Утилита обеспечивает автоматизацию многих этапов установки и обновления сертификатов, устраняя тем самым необходимость вручную выполнять эти операции.
Установка Certbot производится командой:
$ sudo apt install certbot python3-certbot-apache
После завершения инсталляции вы можете запустить процесс получения и установки сертификата Let’s Encrypt для вашего домена. Делается это при помощи следующей команды, в которой замените your-domain.host на имя вашего домена:
$ sudo certbot --apache -d your-domain.host
В процессе выполнения Certbot предложит согласиться с условиями предоставления услуг и попросит предоставить адрес электронной почты для уведомлений о продлении сертификата.

В качестве альтернативы вы можете использовать ту же команду, но без каких-либо опций:
$ sudo certbot –-apache
Такая форма команды может использоваться для получения или продления SSL-сертификатов в отношении всех доменов, работающих на вашем веб-сервере. Либо у вас будет возможность выбрать только определённые домены из списка, для которых необходимо получить или продлить сертификат.
Сертификаты Let’s Encrypt действительны в течение 90 дней. Исходя из этого, есть смысл настроить автоматическое обновление сертификата, чтобы обеспечить непрерывное шифрование. К счастью, Certbot упрощает и этот процесс. Чтобы настроить задание для обновления, запустите следующую команду:
$ sudo certbot renew --dry-run

Проверка подключения по HTTPS
Теперь ваша страница должна быть доступна при подключении с использованием протокола HTTPS. Но сначала необходимо добавить правило для HTTPS в настройки брандмауэра, если ранее вы запускали UFW для защиты вашего виртуального сервера.
Сначала проверьте, для каких протоколов в брандмауэре созданы разрешающие правила:
$ sudo ufw status

В нашем примере UFW содержит разрешающее правило для веб-сервера Apache, но предназначено оно лишь для организации доступа к сайту по протоколу HTTP. Данное правило было добавлено в брандмауэр при установке и настройке Apache. Полный список правил, доступных для включения в UFW можно увидеть, набрав команду:
$ sudo ufw app list

Из вывода команды видно, что для разрешения доступа к сайту по протоколу HTTPS, необходимо добавить в брандмауэр либо специальное правило Apache Secure
, либо правило, распространяющееся и на 80-й, и на 443-й порты – Apache Full
. Для включения правила, разрешающего подключение по HTTPS, запустите команду:
$ sudo ufw allow 'Apache Secure'

Теперь, чтобы увидеть список разрешённых подключений, наберите:
$ sudo ufw status

В списке появилось правило для протокола HTTPS – Apache Secure
. Это означает, что теперь для доступа к нашей странице нужно ввести в браузере строку https://your-domain.host
. В вашем случае замените your-domain.host
на имя вашего сайта.

Это лучшая инструкция по установке Lets Encrypt на VPS, и можно обойтись без системы управления VPS, сэкономив драгоценные ресурсы на сервере.
2024-01-17 at 23:22