是否可以在不重新启动 Apache 和电子邮件服务的情况下续订证书?

Is it possible to renew a certificate for Apache and emails services without restarting them?

我正在为我的域部署新证书以用于 Web 和电子邮件服务。为此,我正在使用 Certbot,这是一个创建和更新 Let's Encrypt 证书的程序。

我看过的每个教程都需要重新启动网络 (apache) 或电子邮件服务 (dovecot)。

有谁知道如何为 apache 或 dovecot 部署新证书并在不重启的情况下开始使用它?

对于 Apache 2.4:"apachectl graceful"(又名 "reload")会为我重新加载证书(使用 2.4.18-2ubuntu3 ubuntu 16.04 进行测试) . 警告:网上有很多信息说 apache 需要完全重启而不是重新加载才能接受新证书。因为对我来说,优雅的重新加载就足够了,我想说这是可能的,甚至可能对于旧的 apache 版本,需要的不仅仅是一次重新加载?

您可以编写一个脚本,首先执行 certbot 更新,然后再执行 apachectl graceful。或者只有 2 个 cronjobs,其中 apachectl graceful 发生在 certbot cronjob 之后。

尽管恕我直言,这个问题并没有那么严重:Letsencrypt 将在到期前最多 30 天更新证书。就个人而言,我更频繁地重启我的服务器,因为我的每周-运行 ubuntu autoupdater 在“/etc/apt/apt.conf.d/50unattended-upgrades”中配置为 "Unattended-Upgrade::Automatic-Reboot "true”; “并且它不会有使其想要重新启动整整 30 天的更新的可能性非常低。

如果您不想重新启动,则必须检查您的其他服务(postfix、dovecot,如果您在服务器上也有邮件,就会想到)他们需要什么来接受新证书,然后添加到以 "certbot renew".

开头的脚本

certbot 文档描述了一种无需重启网络服务器即可获取证书的方法,使用 webroot 插件:https://certbot.eff.org/docs/using.html#webroot

总而言之,您需要将一些额外的参数传递给 certbot 命令以进行续订:certonly--webroot--webroot-path-w。所以完整的命令看起来像这样:

certbot renew certonly --webroot -w /var/www/example/ -d www.example.com

根据文档:

The webroot plugin works by creating a temporary file for each of your requested domains in ${webroot-path}/.well-known/acme-challenge. Then the Let’s Encrypt validation server makes HTTP requests to validate that the DNS for each requested domain resolves to the server running certbot.

这允许 Let's Encrypt 在不停止 Apache 绑定到端口 80、443 等的情况下执行域验证

Certbot 有一个内置命令来更新您的所有证书:

certbot renew certonly --webroot -w /var/www/example/ -d www.example.com

如果您只想在创建证书后重新加载配置,只需 运行 sudo service nginx reloadsudo service apache2 reload。这将重新加载配置而无需重新启动(因此无需停机)您的网站。

我使用此方法通过 cronjob 自动续订我的 Let's Encrypt SSL 证书,但它也适用于 certbot。有关详细信息,请参阅 Automatically renew Let's Encrypt SSL certificate