2016-07-11 12 views

回答

2

的certbot文档描述了获得证书,而无需重新启动Web服务器,使用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的路径} /.well-known/acme-challenge。然后,Let's Encrypt验证服务器使HTTP请求验证每个请求域的DNS解析为运行certbot的服务器。

这让咱们加密,而不停止Apache绑定到端口80,443执行域验证等

+0

过了一段时间,我得到了这个答案。但是现在我遇到了一些麻烦:我不希望通过HTTP使用我的网站。 webroot需要通过HTTP执行挑战。您是否知道在不停止或重新启动Apache的情况下使用HTTPS执行挑战的另一种方法? –

+0

@HugoFonseca如果我正确理解你的问题,应该只允许HTTP连接到$ {webroot-path} /。知名/ acme-challenge中的临时文件,同时仍然需要HTTPS用于其他站点。我可以想象在服务器配置中有几种方法可以做到这一点,也许最简单的可能是.htaccess文件中的URL重写规则。这取决于您希望如何为网站的其他部分强制使用HTTPS,但实际上您只需为该目录创建一个例外。 –

2

对于Apache 2.4:“apachectl graceful”(又名“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续订”。

1

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

+0

重新加载Apache不会使它使用新的证书,您需要重新启动。 – magnetik

相关问题