SSL-сертификаты через DNS: автоматизация выпуска Let’s Encrypt
Опубликовано 04.10.2025
SSL-сертификаты через DNS: автоматизация выпуска Let’s Encrypt
Введение
Let’s Encrypt — стандарт для получения бесплатных TLS-сертификатов. Чаще всего сертификаты выпускаются через метод HTTP-01, который требует доступного веб-сервера на порту 80. Однако для внутренних сервисов или wildcard-сертификатов (например, *.example.com
) удобнее использовать DNS-01, который подтверждает владение доменом через TXT-записи в DNS и не требует открытых портов.
В статье разбираются:
- Выпуск сертификатов через Cloudflare API,
- Выпуск сертификатов через Amazon Route 53 (AWS),
- Интеграция с веб-серверами Nginx, HAProxy и Traefik,
- Автоматизация продления сертификатов.
Примечание: Инструкции актуальны для Certbot 2.x, acme.sh 3.x, Nginx 1.18+, HAProxy 2.4+, Traefik 2.x на Linux (Ubuntu/Debian). Для других ОС или версий инструментов могут потребоваться корректировки.
Cloudflare
1. Создание API-токена
- Войдите в Cloudflare → API Tokens → Create Token.
- Используйте шаблон Edit zone DNS с правами:
Zone.DNS:Edit
Zone.Zone:Read
- Ограничьте токен конкретной зоной.
- Сохраните токен в защищённом месте (секреты CI/CD, переменные окружения).
⚠️ Утечка токена даёт полный контроль над DNS-зоной.
2. Установка Certbot и плагина
Ubuntu/Debian:
sudo apt-get update
sudo apt-get install -y certbot python3-certbot-dns-cloudflare
CentOS/Fedora:
sudo dnf install -y certbot python3-certbot-dns-cloudflare
Через snap:
sudo snap install --classic certbot
sudo snap install certbot-dns-cloudflare
3. Настройка токена
Файл /etc/letsencrypt/cloudflare.ini
:
dns_cloudflare_api_token = YOUR_CF_API_TOKEN
Права:
sudo chown root:root /etc/letsencrypt/cloudflare.ini
sudo chmod 600 /etc/letsencrypt/cloudflare.ini
4. Выпуск сертификата
sudo certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \
-d example.com -d '*.example.com' \
--non-interactive
AWS Route 53
1. Настройка IAM-прав
Создайте политику с минимальными правами для конкретной зоны:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"route53:ChangeResourceRecordSets",
"route53:ListHostedZones",
"route53:ListResourceRecordSets"
],
"Resource": "arn:aws:route53:::hostedzone/<YOUR_HOSTED_ZONE_ID>"
}
]
}
Настройте профиль AWS CLI:
aws configure --profile certbot
Укажите AWS_ACCESS_KEY_ID
, AWS_SECRET_ACCESS_KEY
и регион (например, us-east-1
).
2. Установка плагина
Ubuntu/Debian:
sudo apt-get install -y certbot python3-certbot-dns-route53
CentOS/Fedora:
sudo dnf install -y certbot python3-certbot-dns-route53
3. Выпуск сертификата
AWS_PROFILE=certbot \
sudo certbot certonly \
--dns-route53 \
-d example.com -d '*.example.com' \
--non-interactive
Примечание: можно использовать переменные окружения вместо профиля (
AWS_ACCESS_KEY_ID
,AWS_SECRET_ACCESS_KEY
).
Интеграция с веб-серверами
Nginx
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
Hook для перезагрузки /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
:
#!/bin/sh
if nginx -t; then
systemctl reload nginx
else
echo "Nginx configuration test failed"
exit 1
fi
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
HAProxy
Объединение сертификата и ключа:
cat /etc/letsencrypt/live/example.com/fullchain.pem \
/etc/letsencrypt/live/example.com/privkey.pem \
| tee /etc/haproxy/certs/example.com.pem >/dev/null
Фрагмент конфига:
frontend https-in
bind *:443 ssl crt /etc/haproxy/certs/example.com.pem
default_backend web-backend
Traefik
Файл /etc/traefik/dynamic.yml
:
tls:
certificates:
- certFile: /etc/letsencrypt/live/example.com/fullchain.pem
keyFile: /etc/letsencrypt/live/example.com/privkey.pem
traefik.yml
:
providers:
file:
filename: /etc/traefik/dynamic.yml
Если Traefik работает в Docker:
-v /etc/letsencrypt:/etc/letsencrypt:ro
Автоматизация продления
Certbot
Cron-задание:
sudo crontab -e
0 0,12 * * * certbot renew --quiet --deploy-hook /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
Логи ошибок: /var/log/letsencrypt/letsencrypt.log
.
acme.sh
При установке acme.sh сам прописывает cron. Проверка:
crontab -l | grep acme.sh
Альтернатива: acme.sh
Установка:
curl https://get.acme.sh | sh
Cloudflare:
export CF_Token="YOUR_CF_API_TOKEN"
~/.acme.sh/acme.sh --issue --dns dns_cf -d example.com -d '*.example.com'
AWS Route 53:
export AWS_ACCESS_KEY_ID="AKIA..."
export AWS_SECRET_ACCESS_KEY="..."
export AWS_REGION="us-east-1"
~/.acme.sh/acme.sh --issue --dns dns_aws -d example.com -d '*.example.com'
Установка сертификата:
~/.acme.sh/acme.sh --install-cert -d example.com \
--key-file /etc/ssl/example.com/privkey.pem \
--fullchain-file /etc/ssl/example.com/fullchain.pem \
--reloadcmd "systemctl reload nginx"
Certbot vs acme.sh
Критерий | Certbot | acme.sh | |
---|---|---|---|
Язык | Python | POSIX sh | |
Установка | Пакеты ОС или snap | Один скрипт `curl | sh` |
Поддержка DNS | Официальные плагины | ~40 провайдеров встроено | |
Обновления | Через пакетный менеджер | Автообновление встроено | |
Хуки и деплой | Ограниченные хуки | Удобные --reloadcmd , --deploy | |
Зависимости | Python, пакеты certbot-* | curl , socat , openssl | |
Ресурсы | Тяжелее (Python) | Легче, минималистичный | |
Популярность | Де-факто стандарт, больше документации | Удобнее для CI/CD |
Когда выбрать Certbot:
- если нужна официальная поддержка Let’s Encrypt,
- если удобно ставить пакеты через
apt
/yum
, - если приоритет — стандартная экосистема.
Когда выбрать acme.sh:
- если минимальная среда без Python,
- если выпуск нужно встроить в CI/CD pipeline,
- если DNS-провайдер поддерживается напрямую в acme.sh.
Ограничения и риски
- Утечка API-токена = полный контроль над DNS-зоной.
- Лимиты Let’s Encrypt: до 50 сертификатов в неделю на домен.
- DNS propagation: задержка от секунд до минут.
- Ошибки продления: некорректные хуки могут привести к истечению.
Совет: добавьте мониторинг (Zabbix, Prometheus, Nagios) для контроля сроков действия сертификатов.
Вывод
DNS-валидация позволяет:
- автоматизировать выпуск и продление SSL,
- использовать wildcard-сертификаты,
- не зависеть от открытых портов.
Cloudflare и AWS Route 53 дают API для полной автоматизации. Интеграция с Nginx, HAProxy и Traefik занимает всего несколько строк конфигурации. Автоматическое продление и мониторинг — обязательные шаги для надёжной эксплуатации.
Отзывы по теме
Спасибо Михаилу за отзывчивость. Созвонились, объяснил как сделать самому. Обращаюсь уже второй раз, все супер и оперативно.

kireevk · Консультация по nginx proxy manager и portainer
Освоившийся покупатель25.02.2025 · ⭐ 5/5
Спасибо Михаилу за отзывчивость. Созвонились, объяснил как сделать самому. Обращаюсь уже второй раз, все супер и оперативно.
Хочу выразить огромную благодарность специалисту, который настроил мне ЧПУ на OpenCart. Настроить ЧПУ оказалось легко и просто, и я рад, что наконец нашел профессионала, который сделал всё качественно и без лишних сложностей. До этого я сменил четырёх специалистов, и каждый раз возникали проблемы с настройкой, но этот человек справился с задачей идеально.

apande · Настройка nginx и opencart
Очень мощный покупатель07.09.2024 · ⭐ 5/5
Хочу выразить огромную благодарность специалисту, который настроил мне ЧПУ на OpenCart. Настроить ЧПУ оказалось легко и просто, и я рад, что наконец нашел профессионала, который сделал всё качественно и без лишних сложностей. До этого я сменил четырёх специалистов, и каждый раз возникали проблемы с настройкой, но этот человек справился с задачей идеально.
Отличная работа, обращаюсь не первый раз, находит решения к сложным задачам. Рекомендую.

Evgeni8j · Nginx rate limit
Покупатель профи-эксперт10.05.2024 · ⭐ 5/5
Отличная работа, обращаюсь не первый раз, находит решения к сложным задачам. Рекомендую.
Отличная работа! Выполнил поставленную задачу в срок и без ошибок. Было приятно сотрудничать, рекомендую.

Evgeni8j · Настройка nginx
Покупатель профи-эксперт03.05.2024 · ⭐ 5/5
Отличная работа! Выполнил поставленную задачу в срок и без ошибок. Было приятно сотрудничать, рекомендую.
Отличный специалист, вник в проблему, разобрался, исправил. Рекомендую.

Evgeni8j · Исправление regexp в location в nginx
Покупатель профи-эксперт21.03.2024 · ⭐ 5/5
Отличный специалист, вник в проблему, разобрался, исправил. Рекомендую.
Нужно было решить проблему с SSL сертификатом на сервере, который был выпущен через Ngnix Proxy manager. Михаил уточнил все детали, как у меня все устроено, попросил доступы чтобы оценить реальность решения задачи, т. к. до этого не сталкивался с подобным сервисом. Быстро разобрался и решил мою проблему. Идеальное сотрудничество)

kireevk · Диагностика Nginx Proxy Manager в docker контейнере и решение проблемы
Освоившийся покупатель15.03.2024 · ⭐ 5/5
Нужно было решить проблему с SSL сертификатом на сервере, который был выпущен через Ngnix Proxy manager. Михаил уточнил все детали, как у меня все устроено, попросил доступы чтобы оценить реальность решения задачи, т. к. до этого не сталкивался с подобным сервисом. Быстро разобрался и решил мою проблему. Идеальное сотрудничество)
Похожие посты
107 | Битва за безопасность — FTPS против SFTP
24.09.2025
104 | Революция в реальном времени: Погружение в мир WebSockets и Long Polling
12.09.2025
010 | Настройка DNS для почты и сайта: Часть 3 — Как настроить и проверить
31.05.2025
009 | Настройка DNS для почты и сайта Часть 2 — Защита почты (SPF, DKIM, DMARC)
30.05.2025