Как получить бесплатный сертификат Let's Encrypt для nginx или Apache на своём сервере, проверить продление, добавить домен, выпустить wildcard и разобраться с частыми ошибками.
Содержание
Let's Encrypt выдаёт сертификаты бесплатно, а certbot получает их и продлевает сам. Здесь — для облачного сервера. На хостинге с cPanel сертификаты выпускаются без вашего участия: SSL-сертификаты в cPanel.
Перед началом
- Домен направлен на сервер: A-запись — IP-адрес сервера. Если у домена есть AAAA-запись, она тоже должна вести на этот сервер, иначе проверка пойдёт по IPv6 на другой адрес и провалится.
- Сайт открывается по
http://, порт 80 открыт в межсетевом экране — Как открыть порт.
Проверить записи: dig +short example.ru A и dig +short example.ru AAAA.
Установка
sudo apt install certbot python3-certbot-nginx # Ubuntu, Debian
sudo dnf install epel-release # AlmaLinux
sudo dnf install certbot python3-certbot-nginxДля Apache вместо python3-certbot-nginx поставьте python3-certbot-apache.
Получить сертификат
sudo certbot --nginx -d example.ru -d www.example.rucertbot спросит почту и согласие с условиями, проверит домен, получит сертификат и сам допишет настройки HTTPS в nginx. Для Apache — --apache. Каждое имя, которое должно открываться по HTTPS, перечислите через -d: www — отдельное имя.
Если настройки веб-сервера вы ведёте сами и certbot в них лезть не должен — получите только сертификат:
sudo certbot certonly --webroot -w /var/www/example.ru -d example.ru -d www.example.ruФайлы появятся в /etc/letsencrypt/live/example.ru/: fullchain.pem — сертификат с цепочкой, privkey.pem — ключ. В nginx:
ssl_certificate /etc/letsencrypt/live/example.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.ru/privkey.pem;Продление
Сертификат действует 90 дней, certbot продлевает его сам примерно за месяц до конца. Let's Encrypt постепенно сокращает срок: с 10 февраля 2027 года — 64 дня, с 16 февраля 2028-го — 45. Если продление работает, делать ничего не нужно.
В Ubuntu и Debian продление включено сразу, в AlmaLinux включите его:
sudo systemctl enable --now certbot-renew.timerПроверьте, что продление сработает, — команда ничего не меняет:
sudo certbot renew --dry-runЧтобы веб-сервер подхватывал новый сертификат при certonly, добавьте перезагрузку настроек после продления:
printf '#!/bin/sh\nsystemctl reload nginx\n' | sudo tee /etc/letsencrypt/renewal-hooks/deploy/reload-nginx
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginxsudo certbot certificates — там видна дата окончания.Добавить или убрать домен
sudo certbot certificates # какие сертификаты есть
sudo certbot --nginx --cert-name example.ru -d example.ru -d www.example.ru -d shop.example.ru
sudo certbot delete --cert-name old.example.ru # удалить сертификатС --cert-name certbot заменит список имён в существующем сертификате тем, что перечислен в -d — пишите все нужные имена, не только новое.
Wildcard: *.example.ru
Сертификат на все поддомены сразу Let's Encrypt выдаёт только с проверкой через DNS: нужно добавить TXT-запись _acme-challenge в зону домена.
sudo certbot certonly --manual --preferred-challenges dns -d 'example.ru' -d '*.example.ru'certbot покажет значение записи и подождёт, пока вы её добавите. Так сертификат сам не продлится — повторять придётся вручную. Для автоматического продления нужен модуль certbot для вашего DNS-провайдера, работающий через его API. Если wildcard не обязателен, проще перечислить поддомены через -d.
Частые ошибки
Timeout during connect— Let's Encrypt не достучался до сервера по порту 80: закрыт межсетевым экраном или домен ведёт не туда.unauthorizedилиInvalid responseс кодом 404 — проверка дошла, но не до этого сайта: другой сервер по AAAA-записи, другойserver_nameв nginx или переадресация, которая уводит проверочный адрес.too many certificates already issued— исчерпан лимит: одинаковый набор имён можно получить не больше 5 раз в неделю. Подождите и не выпускайте сертификат заново на каждую попытку — для экспериментов есть ключ--dry-run.CAA record— у домена есть запись CAA, которая не разрешает Let's Encrypt. Добавьте в неёletsencrypt.orgили удалите запись.
Сайт открылся по HTTPS, но браузер ругается на смешанное содержимое — Смешанный контент на HTTPS. Переадресация с http на https — Переадресация на HTTPS.
Не нашли ответ? Напишите в поддержку — подскажем.


