Бесплатный 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).
Шаг 1. Установите certbot
Официальная документация certbot рекомендует ставить его через snap — одинаково для всех дистрибутивов, с уже встроенными плагинами для nginx и Apache (отдельно их ставить не нужно). Версии certbot из репозиториев apt/dnf на LTS-дистрибутивах часто заметно устаревают, поэтому именно snap-пакет — актуальная рекомендация разработчиков certbot.
Ubuntu 22.04/24.04 и Debian 11/12
sudo apt update
sudo apt install snapdAlmaLinux / Rocky Linux 8/9
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 и подготовьте команду:
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/local/bin/certbotПроверьте, что всё встало:
certbot --versionШаг 2. Получите сертификат
Certbot сам находит домены в конфигурации nginx/Apache (server_name / ServerName), получает сертификат, вносит нужные правки в конфиг и включает редирект с HTTP на HTTPS — всё одной командой. Домены можно не перечислять явно: certbot покажет список найденных и предложит выбрать нужные.
Если у вас nginx
sudo certbot --nginx -d example.com -d www.example.comПри первом запуске certbot спросит e-mail (для важных уведомлений о сертификате) и попросит принять условия использования Let's Encrypt. Это можно указать сразу и пройти без вопросов:
sudo certbot --nginx -d example.com -d www.example.com -m you@example.com --agree-tos -nЕсли у вас Apache
На Ubuntu/Debian модуль SSL для Apache уже есть в комплекте — его достаточно включить и перезапустить Apache:
sudo a2enmod ssl
sudo systemctl restart apache2На AlmaLinux/Rocky модуль mod_ssl нужно доустановить отдельным пакетом:
sudo dnf install mod_ssl
sudo systemctl restart httpdДальше — тот же принцип, что и для nginx:
sudo certbot --apache -d example.com -d www.example.comСертификат и приватный ключ certbot сохраняет в /etc/letsencrypt/live/example.com/ (fullchain.pem и privkey.pem) — эти пути пригодятся, если настраиваете HTTPS вручную (режим certonly).
Шаг 3. Настройте автопродление (systemd-таймер)
Сертификаты Let's Encrypt действуют всего 90 дней, поэтому их нужно регулярно продлевать. Настраивать ничего дополнительно не нужно: snap-пакет certbot сам ставит systemd-таймер, который дважды в день проверяет все сертификаты и продлевает те, что скоро истекают.
Убедитесь, что таймер есть и активен:
systemctl list-timers | grep certbotВ выводе должна быть строка с snap.certbot.renew.timer и временем следующего запуска. Подробности о самом таймере:
systemctl status snap.certbot.renew.timerШаг 4. Проверьте продление: certbot renew --dry-run
Не дожидаясь реального истечения сертификата, можно проверить, что продление сработает: certbot смоделирует его на тестовом (staging) сервере Let's Encrypt, не трогая настоящий сертификат.
sudo certbot renew --dry-runПри успехе в конце вывода будет сообщение вроде «Congratulations, all simulated renewals succeeded». Если вместо этого ошибка — чаще всего дело в закрытом порту 80 или домене, который больше не указывает на этот сервер.
Что дальше
HTTPS настроен и будет продлеваться сам. Дальше имеет смысл донастроить сам веб-сервер — см. статьи nginx и Apache, а также проверить, что в файрволе открыто ровно то, что нужно, — статья «UFW-фаервол».