Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在不重新启动的情况下续订Apache和电子邮件服务的证书?_Apache_Email_Dovecot_Lets Encrypt - Fatal编程技术网

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

是否可以在不重新启动的情况下续订Apache和电子邮件服务的证书?,apache,email,dovecot,lets-encrypt,Apache,Email,Dovecot,Lets Encrypt,我正在为我的域部署新证书,以便在web和电子邮件服务上使用。为此,我使用Certbot,一个创建和更新证书的程序,让我们加密证书 我看过的每个教程都要求重新启动web(apache)或电子邮件服务(dovecot) 有人知道如何为apache或dovecot部署新证书并在不重新启动的情况下开始使用它吗?对于apache 2.4:“apachectl优雅”(又名“重新加载”)会为我重新加载证书(使用ubuntu 16.04使用2.4.18-2ubuntu3进行测试)。 警告:web上有很多信息表明

我正在为我的域部署新证书,以便在web和电子邮件服务上使用。为此,我使用Certbot,一个创建和更新证书的程序,让我们加密证书

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

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

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

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

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


如果您不想重新启动,您必须检查您的其他服务(postfix,如果服务器上也有邮件,请记住dovecot)接受新证书所需的内容,然后将其添加到启动“certbot续订”的脚本中.

certbot文档描述了一种无需重新启动Web服务器即可使用webroot插件获取证书的方法:

总而言之,您需要向certbot命令传递几个额外参数以进行续订:
certonly
--webroot
、和
--webroot path
-w
。因此,完整命令将如下所示:

certbot renew certonly --webroot -w /var/www/example/ -d www.example.com
根据文件:

webroot插件通过在${webroot path}/.well-known/acme challenge中为每个请求的域创建一个临时文件来工作。然后,Let's Encrypt验证服务器发出HTTP请求,以验证每个请求域的DNS是否解析为运行certbot的服务器


这允许我们加密以执行域验证,而无需停止Apache绑定到端口80、443等。

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

certbot renew certonly --webroot -w /var/www/example/ -d www.example.com
如果您想在创建证书后重新加载配置,只需运行
sudo service nginx reload
sudo service apache2 reload
。这将重新加载配置,而不会重新启动网站(因此不会停机)


我使用此方法通过cronjob自动更新我的Let's Encrypt SSL证书,但它也适用于certbot。有关更多详细信息,请参见

一段时间后,我得到了这个答案。但现在我遇到了一些麻烦:我不希望我的网站通过HTTP。webroot需要通过HTTP执行质询。您知道在不停止或重新启动Apache的情况下使用HTTPS执行质询的另一种方法吗?@HugoFonseca如果我正确理解您的问题,应该可以只允许对${webroot path}/.well-known/acme质询中的临时文件进行HTTP连接,而对站点的其余部分仍然需要HTTPS。我可以想象在服务器配置中实现这一点的几种方法,也许最简单的方法是在.htaccess文件中使用URL重写规则。这取决于您希望如何对站点的其余部分强制使用HTTPS,但实际上您只需要为该目录创建一个例外。重新加载apache不会使其使用新证书,您需要重新启动。