Настройка Let's Encrypt SSL с автоматическим обновлением
Let's Encrypt — бесплатный центр сертификации, выдающий DV-сертификаты сроком 90 дней. Certbot автоматизирует получение и обновление: сертификат обновляется без ручного вмешательства.
Установка Certbot
# Ubuntu/Debian
apt install certbot python3-certbot-nginx
# CentOS/RHEL
dnf install certbot python3-certbot-nginx
# Snap (универсальный)
snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot
Получение сертификата
# Автоматический режим — Certbot сам правит nginx конфиг
certbot --nginx -d example.ru -d www.example.ru
# Только получить сертификат (без изменения nginx)
certbot certonly --nginx -d example.ru -d www.example.ru
# Wildcard сертификат (только через DNS challenge)
certbot certonly --manual \
--preferred-challenges=dns \
-d example.ru \
-d *.example.ru
Для wildcard нужно добавить TXT-запись _acme-challenge.example.ru в DNS. Поддерживается автоматизация через плагины (certbot-dns-cloudflare, certbot-dns-route53).
Автоматическое обновление через DNS-challenge (Cloudflare)
pip install certbot-dns-cloudflare
# /etc/letsencrypt/cloudflare.ini
dns_cloudflare_api_token = YOUR_CLOUDFLARE_API_TOKEN
certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \
-d example.ru \
-d *.example.ru
Автоматическое обновление
Certbot при установке добавляет systemd timer или cron. Проверка:
# Проверить таймер
systemctl list-timers | grep certbot
# Тест обновления (без реального обновления)
certbot renew --dry-run
# Ручное обновление
certbot renew
Если хук не добавлен автоматически — добавить в cron:
# Crontab
0 3 * * * certbot renew --quiet --post-hook "systemctl reload nginx"
--post-hook перезагружает Nginx после обновления сертификата — без этого Nginx продолжит использовать старый сертификат.
Конфигурация Nginx после certbot
# /etc/nginx/sites-available/example.ru.conf
# (certbot добавит ssl_certificate и ssl_certificate_key автоматически)
server {
listen 443 ssl;
server_name example.ru www.example.ru;
# Добавленные certbot
ssl_certificate /etc/letsencrypt/live/example.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.ru/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
# Дополнительно
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
ssl_stapling on;
ssl_stapling_verify on;
}
Мониторинг срока действия
# Проверить срок действия
openssl x509 -enddate -noout -in /etc/letsencrypt/live/example.ru/cert.pem
# Через curl
echo | openssl s_client -servername example.ru -connect example.ru:443 2>/dev/null \
| openssl x509 -noout -dates
Мониторинг через Zabbix, Prometheus (blackbox_exporter) или сервис UptimeRobot (проверка SSL срока).
Срок настройки: 30–60 минут для одного домена с Nginx.







