Назад | Перейти на главную страницу

Продлить сертификат letsencrypt на Apache httpd

я использую certbot --webroot плагин и certbot renew для обновления сертификата, который работает, но похоже httpd кэширует сертификат и не «видит», что он обновлен.

Есть сигнал для httpd перезагрузить сертификаты?

p.s. Я предпочитаю не перезапускать httpd чтобы избежать простоев.

Получить httpd чтобы заметить новые сертификаты, вам нужно запросить "плавный перезапуск". Из документов:

USR1 или изящный сигнал заставляет родительский процесс рекомендовать дочерним процессам выйти после их текущего запроса (или немедленно выйти, если они ничего не обслуживают). Родитель перечитывает свои файлы конфигурации и повторно открывает файлы журнала. Когда каждый дочерний элемент умирает, родитель заменяет его дочерним элементом из нового поколения конфигурации, который немедленно начинает обслуживать новые запросы.

Таким образом, плавный перезапуск не приведет к простоям.

Чтобы letsencrypt / certbot запускал плавный перезапуск, используйте --post-hook аргумент. Этот аргумент запускает команду один раз, если была предпринята попытка обновления сертификата. Из документы:

Команда, запускаемая в оболочке после попытки получить / обновить сертификаты. Может использоваться для развертывания обновленных сертификатов или для перезапуска любых серверов, остановленных с помощью --pre-hook. Это запускается только в том случае, если была сделана попытка получить / обновить сертификат. (по умолчанию: нет)

Итак, вам нужна команда

certbot renew --post-hook "apachectl graceful"

или при запуске из задания cron

certbot renew --quiet --post-hook "apachectl graceful"

(Спасибо @RustyX за помощь с этим ответом)