Wildcard через DNS-01 и деплой-хук перезагрузки nginx.
sudo apt install -y certbot python3-certbot-dns-cloudflare
certbot --versionОдин wildcard покрывает все поддомены — сколько бы заглушек ни добавили, новый сертификат не понадобится.
sudo certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \
--dns-cloudflare-propagation-seconds 60 \
-d example.com -d '*.example.com'Современный certbot по умолчанию выпускает ECDSA — это то, что нужно.
Проверка: sudo certbot certificates.
Основной и единственный поток — один ECDSA wildcard на все домены. Если когда-нибудь понадобится включить пост-квантовую подпись ML-DSA65 в Reality — ей нужен отдельный сертификат с большим объёмом (маскировка под «тяжёлый» таргет), подробности в 05-troubleshooting.md.
Не пропускайте. Без хука всё работает ровно до первого автопродления, а
потом ломается молча: certbot обновляет файлы на диске, но nginx держит
сертификат в памяти с момента последнего reload. Через 60–90 дней сервер
начинает отдавать просроченный сертификат при полностью валидных файлах —
браузеры показывают предупреждение, а Reality-таргет перестаёт проходить
проверку.
sudo tee /etc/letsencrypt/renewal-hooks/deploy/90-reload-nginx.sh > /dev/null <<'EOF'
#!/bin/bash
set -e
if systemctl is-active --quiet nginx; then
nginx -t && systemctl reload nginx
fi
EOF
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/90-reload-nginx.shchmod +x обязателен — без него certbot молча пропустит хук. Префикс 90-
задаёт порядок (certbot идёт по алфавиту): если позже появятся хуки,
готовящие файлы сертификата, давайте им меньший номер, чтобы reload шёл
последним.
Проверка продления:
sudo certbot renew --dry-runЖдём Congratulations, all simulated renewals succeeded. Прогоняйте после
любого изменения в сертификатах.
Новых сертификатов не нужно — wildcard покрывает любой поддомен (на один
уровень: plug3.example.com покрыт, a.plug3.example.com — нет). Все
заглушки используют один и тот же ECDSA wildcard, отдельной линии под
конкретную заглушку не заводим.
-
sudo certbot certificatesпоказывает нужную линию - Deploy-хук существует и исполняемый
-
sudo certbot renew --dry-runпроходит
Дальше: 04-services.md