MHOSTMHOST

Бесплатный SSL с Let's Encrypt (certbot)

Let's Encrypt выдаёт доверенные TLS-сертификаты бесплатно, а клиент certbot делает всё остальное: подтверждает владение доменом, получает сертификат, включает HTTPS в nginx или Apache и настраивает автопродление. Из этой статьи вы получите рабочий HTTPS за несколько минут — и больше не будете вспоминать об истечении сертификата.

Что понадобится

  • Домен, у которого A-запись уже указывает на публичный IP этого VPS (AAAA не нужна — VPS mHost работают только по IPv4) — Let's Encrypt проверяет владение доменом по HTTP, поэтому DNS должен быть настроен заранее.
  • Установленный и настроенный nginx или Apache, которые уже отдают сайт по обычному HTTP (порт 80) с нужным доменом в server_name (nginx) или ServerName (Apache). Если веб-сервера ещё нет — можно поставить его через готовый рецепт LEMP/LAMP (см. статью «Готовые рецепты VMmanager 6») или вручную — см. статьи nginx и Apache.
  • Доступ по SSH под root или пользователем с sudo.
  • Открытые порты 80 (по нему Let's Encrypt проверяет домен) и 443 (по нему будет работать HTTPS).
Важно: откройте порты 80 и 443 в файрволе — иначе Let's Encrypt не сможет подтвердить домен, а браузеры не достучатся до HTTPS. На Ubuntu/Debian с ufw — см. статью «UFW-фаервол»; на AlmaLinux/Rocky с firewalld: sudo firewall-cmd --permanent --add-service=http --add-service=https && sudo firewall-cmd --reload.
Совет: проверить, что домен уже смотрит на этот сервер, можно командой dig +short example.com — она должна вернуть тот же IP-адрес, что указан в карточке сервера в VMmanager 6.

Шаг 1. Установите certbot

Официальная документация certbot рекомендует ставить его через snap — одинаково для всех дистрибутивов, с уже встроенными плагинами для nginx и Apache (отдельно их ставить не нужно). Версии certbot из репозиториев apt/dnf на LTS-дистрибутивах часто заметно устаревают, поэтому именно snap-пакет — актуальная рекомендация разработчиков certbot.

Ubuntu 22.04/24.04 и Debian 11/12

bash
sudo apt update
sudo apt install snapd
Совет: на Ubuntu snapd обычно уже установлен по умолчанию — команда выше просто убедится, что он свежий. На Debian после установки может понадобиться переподключиться по SSH, чтобы подхватился обновлённый PATH.

AlmaLinux / Rocky Linux 8/9

bash
sudo dnf install epel-release
sudo dnf upgrade
sudo dnf install snapd
sudo systemctl enable --now snapd.socket
sudo ln -s /var/lib/snapd/snap /snap

После этого переподключитесь по SSH — иначе пути snap не подхватятся.

Дальше — одинаково для всех систем. Если certbot уже стоял из системного пакетного менеджера, сначала удалите его, чтобы не конфликтовал со snap-версией:

  • Ubuntu/Debian: sudo apt-get remove certbot
  • AlmaLinux/Rocky: sudo dnf remove certbot

Установите сам certbot и подготовьте команду:

bash
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/local/bin/certbot

Проверьте, что всё встало:

bash
certbot --version

Шаг 2. Получите сертификат

Certbot сам находит домены в конфигурации nginx/Apache (server_name / ServerName), получает сертификат, вносит нужные правки в конфиг и включает редирект с HTTP на HTTPS — всё одной командой. Домены можно не перечислять явно: certbot покажет список найденных и предложит выбрать нужные.

Если у вас nginx

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

При первом запуске certbot спросит e-mail (для важных уведомлений о сертификате) и попросит принять условия использования Let's Encrypt. Это можно указать сразу и пройти без вопросов:

bash
sudo certbot --nginx -d example.com -d www.example.com -m you@example.com --agree-tos -n
Совет: чтобы отредактировать конфиг nginx самостоятельно, получите только сертификат — без автоматической правки конфигурации: sudo certbot certonly --nginx -d example.com -d www.example.com.

Если у вас Apache

На Ubuntu/Debian модуль SSL для Apache уже есть в комплекте — его достаточно включить и перезапустить Apache:

bash
sudo a2enmod ssl
sudo systemctl restart apache2

На AlmaLinux/Rocky модуль mod_ssl нужно доустановить отдельным пакетом:

bash
sudo dnf install mod_ssl
sudo systemctl restart httpd

Дальше — тот же принцип, что и для nginx:

bash
sudo certbot --apache -d example.com -d www.example.com
Совет: вариант только с получением сертификата, без автоправки конфигурации Apache — sudo certbot certonly --apache -d example.com -d www.example.com.

Сертификат и приватный ключ certbot сохраняет в /etc/letsencrypt/live/example.com/ (fullchain.pem и privkey.pem) — эти пути пригодятся, если настраиваете HTTPS вручную (режим certonly).

Готово: откройте https://example.com в браузере — должен появиться замок и не быть предупреждений о сертификате.

Шаг 3. Настройте автопродление (systemd-таймер)

Сертификаты Let's Encrypt действуют всего 90 дней, поэтому их нужно регулярно продлевать. Настраивать ничего дополнительно не нужно: snap-пакет certbot сам ставит systemd-таймер, который дважды в день проверяет все сертификаты и продлевает те, что скоро истекают.

Убедитесь, что таймер есть и активен:

bash
systemctl list-timers | grep certbot

В выводе должна быть строка с snap.certbot.renew.timer и временем следующего запуска. Подробности о самом таймере:

bash
systemctl status snap.certbot.renew.timer
Совет: параметры, с которыми выпущен каждый сертификат (домены, плагин, e-mail), certbot хранит в /etc/letsencrypt/renewal/example.com.conf — именно этот файл таймер использует при продлении, руками туда лезть обычно не нужно.

Шаг 4. Проверьте продление: certbot renew --dry-run

Не дожидаясь реального истечения сертификата, можно проверить, что продление сработает: certbot смоделирует его на тестовом (staging) сервере Let's Encrypt, не трогая настоящий сертификат.

bash
sudo certbot renew --dry-run

При успехе в конце вывода будет сообщение вроде «Congratulations, all simulated renewals succeeded». Если вместо этого ошибка — чаще всего дело в закрытом порту 80 или домене, который больше не указывает на этот сервер.

Совет: проверяйте так сразу после выпуска сертификата и после любых изменений в конфигурации веб-сервера или файрвола — чтобы не столкнуться с проблемой продления уже после того, как старый сертификат истёк.

Что дальше

HTTPS настроен и будет продлеваться сам. Дальше имеет смысл донастроить сам веб-сервер — см. статьи nginx и Apache, а также проверить, что в файрволе открыто ровно то, что нужно, — статья «UFW-фаервол».