是否可以为Apache和电子邮件服务续订证书而无需重新启动它们?

时间:2016-07-11 17:34:59

标签: apache email dovecot lets-encrypt

我正在尝试为我在网络和电子邮件服务上使用的域获取新证书。

为此,我使用Certbot,它用作客户端程序连接到LetsEncrypt,后者执行证书创建。

我所看到的每个教程都没有确定任何更新证书的方法,而无需重新启动Web(如Apache)或电子邮件服务。

有谁知道怎么做?

3 个答案:

答案 0 :(得分:2)

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

您可以创建一个首先执行certbot续订然后apachectl优雅的脚本。或者只是2个cronjobs,其中apachectl优雅发生在certbot cronjob之后。

虽然恕我直言,但这个问题并没有那么糟糕:Letsencrypt会在到期前30天续签证书。我个人更频繁地重新启动我的服务器,因为我的每周运行的ubuntu autoupdater配置在" /etc/apt/apt.conf.d/50unattended-upgrades"使用"无人值守升级::自动重启" true";"并且它没有更新能让它想要重启整整30天的可能性非常低。

如果您不想重新启动,则必须检查您的其他服务(如果您还在服务器上有邮件,请记住postfix,dovecot)他们接受新证书所需的内容然后添加到您的脚本开始" certbot renew"。

答案 1 :(得分:2)

certbot文档描述了使用webroot插件获取证书而无需重新启动Web服务器的方法: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

根据文件:

  

webroot插件的工作原理是在$ {webroot-path} /。熟知/ acme-challenge中为每个请求的域创建一个临时文件。然后,Let的加密验证服务器发出HTTP请求,以验证每个请求的域的DNS是否解析为运行certbot的服务器。

这允许Let's Encrypt执行域验证,而不会阻止Apache绑定到端口80,443等。

答案 2 :(得分:1)

Certbot有一个内置命令来续订所有证书:

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

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

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