Как получить бесплатный SSL-сертификат Let's Encrypt
Практика3 минРедакция Innovialabs
Коротко
Нажмите кнопку 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: через панель хостинга
- Откройте раздел «SSL/TLS» или «Сертификаты».
- Выберите Let's Encrypt, отметьте домен и
www. - Включите перенаправление с 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 ещё не гарантирует, что сайт отдаёт новый сертификат. Проверьте три вещи:
- Что знает Certbot:
sudo certbot certificatesпоказывает дату окончания. - Что отдаёт сервер:
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -enddate
Если даты в пунктах 1 и 2 расходятся, сервер не перезагрузился после продления.
- Внешний мониторинг. Let's Encrypt больше не рассылает письма об истечении сертификатов, поэтому подключите сервис мониторинга с проверкой SSL, который предупредит, если до окончания осталось мало дней.
Частые ошибки
- Закрыт порт 80 или редирект/защита блокирует
/.well-known/acme-challenge/— проверка не проходит. - Используется
cert.pemвместоfullchain.pem— в браузере на компьютере всё работает, а на части устройств и в API-клиентах ошибка цепочки. - Две установки Certbot (из пакетов и из snap) — продлевает одна, а смотрите вы в другую.
- Многократные тесты на боевом сервере — можно упереться в лимиты Let's Encrypt. Для экспериментов используйте
--dry-runили--staging.