Налаштування 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.ua -d www.example.ua
# Тільки отримати сертифікат (без зміни nginx)
certbot certonly --nginx -d example.ua -d www.example.ua
# Wildcard сертифікат (тільки через DNS challenge)
certbot certonly --manual \
--preferred-challenges=dns \
-d example.ua \
-d *.example.ua
Для wildcard потрібно додати TXT-запис _acme-challenge.example.ua у 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.ua \
-d *.example.ua
Автоматичне оновлення
Certbot при встановленні додає systemd timer або cron. Перевірка:
# Перевірити таймер
systemctl list-timers | grep certbot
# Тест оновлення (без реального оновлення)
certbot renew --dry-run
# Ручне оновлення
certbot renew
Якщо hook не додано автоматично — додати в cron:
# Crontab
0 3 * * * certbot renew --quiet --post-hook "systemctl reload nginx"
--post-hook перезагружає Nginx після оновлення сертифіката — без цього Nginx продовжить використовувати старий сертифікат.
Конфігурація Nginx після certbot
# /etc/nginx/sites-available/example.ua.conf
# (certbot додасть ssl_certificate та ssl_certificate_key автоматично)
server {
listen 443 ssl;
server_name example.ua www.example.ua;
# Доданих certbot
ssl_certificate /etc/letsencrypt/live/example.ua/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.ua/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.ua/cert.pem
# Через curl
echo | openssl s_client -servername example.ua -connect example.ua:443 2>/dev/null \
| openssl x509 -noout -dates
Моніторинг через Zabbix, Prometheus (blackbox_exporter) або UptimeRobot (перевірка SSL строку).
Строки налаштування: 30–60 хвилин для одного домену з Nginx.







