Перейти к содержанию
Innovialabs

Как получить бесплатный SSL-сертификат Let's Encrypt

Практика3 мин

Коротко

Нажмите кнопку Let's Encrypt в панели хостинга или выполните certbot на сервере, затем убедитесь, что автопродление включено, прогоните certbot renew --dry-run и настройте внешний мониторинг срока действия.

Коротко

Let's Encrypt — бесплатный центр сертификации, который выдаёт DV-сертификаты: они подтверждают, что вы управляете доменом. Для шифрования HTTPS они ничем не хуже платных.

Есть два пути:

  • Панель хостинга (cPanel, Plesk, ISPmanager и другие) — сертификат выпускается и продлевается кнопкой.
  • Certbot на своём сервере (VPS, выделенный сервер) — официальный клиент, который получает сертификат, прописывает его в веб-сервер и продлевает.

Сертификаты Let's Encrypt короткоживущие: сейчас это 90 дней, и проект планирует сокращать срок дальше. Поэтому главное — не выпуск, а автоматическое продление и проверка, что оно работает.

Что подготовить заранее

  • Домен уже указывает на сервер: A-запись (и AAAA, если есть IPv6) ведёт на нужный IP.
  • Порт 80 открыт в файрволе — по нему проходит стандартная HTTP-проверка.
  • Если у домена есть AAAA-запись, по IPv6 должен отвечать тот же сервер: Let's Encrypt проверяет и этот адрес.
  • Если есть CAA-записи, среди них должна быть letsencrypt.org.

Вариант 1: через панель хостинга

  1. Откройте раздел «SSL/TLS» или «Сертификаты».
  2. Выберите Let's Encrypt, отметьте домен и www.
  3. Включите перенаправление с HTTP на HTTPS, если панель предлагает.

Продление панель делает сама. Ваша задача — раз в несколько месяцев убедиться, что дата окончания сдвигается, и не удалять служебные правила для пути /.well-known/acme-challenge/.

Вариант 2: Certbot на сервере с Nginx

Установите Certbot по официальной инструкции для вашей ОС и веб-сервера на certbot.eff.org. На Debian и Ubuntu это может выглядеть так:

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com

Certbot проверит домен, получит сертификат, пропишет его в конфигурацию Nginx и предложит настроить редирект на HTTPS. Для Apache используйте плагин --apache.

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

sudo certbot certonly --webroot -w /var/www/example -d example.com -d www.example.com

Файлы окажутся в /etc/letsencrypt/live/example.com/. В конфиге сервера используйте fullchain.pem (сертификат с цепочкой) и privkey.pem, а не cert.pem.

Автопродление

Пакеты Certbot обычно сами создают systemd-таймер или cron-задачу, которая регулярно запускает certbot renew. Он продлевает только те сертификаты, срок которых подходит к концу. Проверьте:

systemctl list-timers | grep certbot
sudo certbot renew --dry-run

--dry-run проходит весь процесс на тестовом сервере и ничего не меняет. Если таймера нет, добавьте задачу в cron вручную.

При certonly веб-сервер сам не перечитает новый сертификат. Добавьте deploy-hook: скрипт, который Certbot запускает после успешного продления.

sudo tee /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh <<'EOF'
#!/bin/sh
systemctl reload nginx
EOF
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh

Как убедиться, что продление действительно работает

Успешный --dry-run ещё не гарантирует, что сайт отдаёт новый сертификат. Проверьте три вещи:

  1. Что знает Certbot: sudo certbot certificates показывает дату окончания.
  2. Что отдаёт сервер:
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -enddate

Если даты в пунктах 1 и 2 расходятся, сервер не перезагрузился после продления.

  1. Внешний мониторинг. Let's Encrypt больше не рассылает письма об истечении сертификатов, поэтому подключите сервис мониторинга с проверкой SSL, который предупредит, если до окончания осталось мало дней.

Частые ошибки

  • Закрыт порт 80 или редирект/защита блокирует /.well-known/acme-challenge/ — проверка не проходит.
  • Используется cert.pem вместо fullchain.pem — в браузере на компьютере всё работает, а на части устройств и в API-клиентах ошибка цепочки.
  • Две установки Certbot (из пакетов и из snap) — продлевает одна, а смотрите вы в другую.
  • Многократные тесты на боевом сервере — можно упереться в лимиты Let's Encrypt. Для экспериментов используйте --dry-run или --staging.

Частые вопросы

Шифрование то же самое. Платные сертификаты отличаются типом проверки (OV и EV подтверждают организацию), сроком действия, поддержкой и гарантийными обязательствами. Для большинства сайтов DV от Let's Encrypt достаточно.

Поможем с этим

Если хотите не разбираться самим, а получить результат — этим мы занимаемся каждый день.

Обсудить проект

Читайте также

Есть идея или задача? Расскажите нам

Ответим в течение рабочего дня и предложим решение. Консультация бесплатная.