Вы обеспокоены тем, что групповой сертификат letencrypt не может быть автоматически продлен (обновлен) с помощью инструмента certbot? Этот инструмент может помочь!
Независимо от заявки или продления, если это сертификат с подстановочными знаками, доменное имя заявителя можно проверить только с помощью DNS-01, что означает, что оператор сертификат-бота должен вручную добавлять записи DNS TXT.
Если вы напишете Cron (например, 1 1 */1 * * root certbot-auto renew) для автоматического продления сертификата с подстановочными знаками, Cron не сможет автоматически добавить запись TXT, поэтому операция обновления завершится неудачно. Как решить эту проблему?
certbot предоставляет перехватчик, который позволяет вам написать сценарий Shell для вызова API-интерфейса поставщика услуг DNS и динамического добавления записей TXT, устраняя необходимость ручного вмешательства.
Среди примеров плагинов и перехватчиков, официально предоставленных certbot, нет примеров для отечественных DNS-серверов, поэтому я написал такой инструмент, который на данный момент поддерживает Alibaba Cloud DNS , Tencent Cloud DNS , Huawei Cloud NDS и GoDaddy (certbot не имеет официальный аналог).
Несколько PR были недавно объединены и еще не тестировались. Если у вас есть вопросы, дайте мне знать. Спасибо!
1: Скачать
$ git clone https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au
$ cd certbot-letencrypt-wildcardcertificates-alydns-au
$ chmod 0777 au.sh
2: Конфигурация
(1)домен.ini
Если файл domain.ini не содержит имя корневого домена, добавьте его самостоятельно.
(2) Ключ DNS API:
Что означает этот ключ API? Поскольку вам необходимо управлять записями Alibaba Cloud DNS и Tencent Cloud DNS через API, вам необходимо получить ключ API от поставщика услуг доменных имен, а затем настроить его в файле au.sh:
(3) Выберите операционную среду.
На данный момент инструмент поддерживает пять операционных сред и сценариев, которые вызываются через файлы-перехватчики и параметры:
Выберите любую оболочку перехватчика (включая соответствующие параметры) в соответствии с вашей серверной средой и поставщиком услуг доменных имен. Подробности использования см. ниже.
3: Подать заявку на сертификат
Проверьте наличие ошибок:
$ ./certbot-auto certonly -d *.example.com --manual --preferred-challenges dns --dry-run --manual-auth-hook "/脚本目录/au.sh php aly add" --manual-cleanup-hook "/脚本目录/au.sh php aly clean"
Отладка: при работе с DNS API вы можете столкнуться с рядом проблем, например с недостаточными разрешениями токена API. Если вы столкнулись с соответствующими проблемами, вы можете проверить /var/log/certd.log.
Важное объяснение: --manual-auth-hook и --manual-cleanup-hook имеют три параметра:
Например, если вы хотите выбрать среду Python, вы можете изменить ввод --manual-auth-hook на «/scriptdirectory/au.sh python aly add», а ввод --manual-cleanup-hook на «/ каталог сценариев /au.sh python aly clean"
Убедившись в правильности, запустите (удалите параметр --dry-run):
# 实际申请
$ ./certbot-auto certonly -d *.example.com --manual --preferred-challenges dns --manual-auth-hook "/脚本目录/au.sh php aly add" --manual-cleanup-hook "/脚本目录/au.sh php aly clean"
Объяснение параметра (вам не нужно об этом беспокоиться):
Если вы хотите подать заявку на сертификаты с подстановочными знаками для нескольких доменных имен (объединенных в один сертификат, также называемый сертификатом с подстановочными знаками SAN ), просто введите несколько параметров -d напрямую, например:
$ ./certbot-auto certonly -d *.example.com -d *.example.org -d www.example.cn --manual --preferred-challenges dns --dry-run --manual-auth-hook "/脚本目录/au.sh php aly add" --manual-cleanup-hook "/脚本目录/au.sh php aly clean"
1. Обновите все сертификаты на машине.
$ ./certbot-auto renew --manual --preferred-challenges dns --manual-auth-hook "/脚本目录/au.sh php aly add" --manual-cleanup-hook "/脚本目录/au.sh php aly clean"
2. Продлить определенный сертификат
Сначала посмотрим, сколько сертификатов имеется на машине:
$ ./certbot-auto certificates
Вы можете увидеть множество сертификатов, как показано на рисунке:
Запомните имя сертификата, например simplehttps.com, а затем выполните следующую команду обновления:
$ ./certbot-auto renew --cert-name simplehttps.com --manual-auth-hook "/脚本目录/au.sh php aly add" --manual-cleanup-hook "/脚本目录/au.sh php aly clean"
Отредактируйте файл /etc/crontab:
#证书有效期<30天才会renew,所以crontab可以配置为1天或1周
1 1 */1 * * root certbot-auto renew --manual --preferred-challenges dns --manual-auth-hook "/脚本目录/au.sh php aly add" --manual-cleanup-hook "/脚本目录/au.sh php aly clean"
Если машина certbot — это та же машина, на которой запущены веб-службы (например, nginx, apache), то после успешного продления сертификата вы можете запустить соответствующий веб-сервер и запустить следующий crontab:
# 注意只有成功renew证书,才会重新启动nginx
1 1 */1 * * root certbot-auto renew --manual --preferred-challenges dns --deploy-hook "service nginx restart" --manual-auth-hook "/脚本目录/au.sh php aly add" --manual-cleanup-hook "/脚本目录/au.sh php aly clean"
Примечание. Рекомендуется запускать этот способ только на одном компьютере. Если вы хотите синхронизировать сертификат с несколькими веб-серверами, вам нужно другое решение. В настоящее время оно находится в стадии разработки, основная цель — синхронизировать сертификат с сервером кластера.
QR-код официального аккаунта:
«Углубленное введение в HTTPS: от принципов к практике» QR-код: