我的 https 证书将在大约一周后过期,我运行了脚本来更新它们。
它们似乎已经更新了,因为如果我尝试certbot-auto
再次运行,它会显示一些消息,提示证书到期日期应该更接近今天的日期。
问题是该网站看起来仍在提供旧证书。到期日期没有改变。
这是预料之中的吗?如何强制更新证书?
相关输出:
$ echo | openssl s_client -connect ionicabizau.net:443 2>/dev/null | openssl x509 -noout -dates
notBefore=Aug 28 03:40:00 2016 GMT
notAfter=Nov 26 03:40:00 2016 GMT
服务器上的文件看起来已更新:
$ ls
cert.pem chain.pem fullchain.pem privkey.pem
$ stat -c '%y' *
2016-11-17 06:03:20.838837999 +0000
2016-11-17 06:03:20.838837999 +0000
2016-11-17 06:03:20.838837999 +0000
2016-11-17 06:03:20.838837999 +0000
答案1
Web 服务器守护进程(apache、nginx 等)仅在加载配置时加载证书,并在运行时将其保存在内存中。certbot 提供了一些钩子参数,您可以使用这些参数在证书更新后重新加载守护进程。
例子来自文档:
certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"
不过,使用 post hook 重新加载服务就足够了。这是我使用的:
certbot renew --deploy-hook "service nginx reload"
当然,您可以service nginx reload
在每次运行 certbot 后运行,但使用更新挂钩的好处是,只有在证书实际已更新时才会重新加载守护进程。