部署完QUIC集群之后,原来申请的https证书到期了,就尝试了下重新安装/更新证书。
Let’s Encrypt 是一个自动签发 https 证书的免费项目
Certbot 是 Let’s Encrypt 官方推荐的证书生成客户端工具
因为我的quic集群是直接把原来的证书复制到自定义的目录下,所以没有安装过certbot,先安装下certbot。
先安装snapd,根据自己的linux系统(我的是Red Hat Enterprise Linux 8),选择对应的snapd安装教程
$ sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
$ sudo dnf upgrade
$ sudo yum install snapd
创建软链接
$ sudo systemctl enable --now snapd.socket
$ sudo ln -s /var/lib/snapd/snap /snap
## 更新snap到最新的版本
sudo snap install core
sudo snap refresh core
## 去除其余Certbot操作系统包 确保安装后使用certbot命令使用的是snap
sudo apt-get remove certbot
sudo dnf remove certbot
sudo yum remove certbot
sudo snap install --classic certbot
#创建软链接
sudo ln -s /snap/bin/certbot /usr/bin/certbot
因为在机器上我已经存放了旧的证书,所以我一开始的想法是直接更新旧证书就可以了,先通过certbot certificates
查看下当前服务器的证书信息
但是结果没有返回当前的证书信息给我。我猜测可能是由于我之前迁移证书的时候只迁移了配置nginx需要的pem文件,存放路径也和旧集群安装证书时的默认路径不一样。
我将原来的证书路径/etc/letsencrypt 下的所有文件都打包后上传到新集群的Nginx机器上同样的路径,再使用certbot certificates
查看证书就可以看到旧证书了
接下来使用certbot renew
命令更新证书就行了
遇到的问题:
在更新证书的时候,会出现如上报错,说是访问xxx/.well-known/acme-challenge/xxx
来验证域名所有权的时候出现连接不通的情形。
因为使用aws部署的nginx集群,把域名绑定到了负载均衡器上,一开始负载均衡器只侦听了quic的443端口,添加了对80端口的侦听之后不再提示无法连接而返回404错误码。
判断是由于上述路径无法访问到的问题,多次尝试后始终匹配不到路径;最后想到这个请求是为了验证域名所有权,但是我是将域名绑定到了负载均衡器上,而不是更新证书的服务器上,将域名绑定到服务器ip上之后再次执行certbot renew
,就更新成功了
由于新证书的路径跟之前的不一样,nginx配置文件里的证书路径需要修改成如下:
ssl_certificate /etc/letsencrypt/live/you.domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/you.domain.com/privkey.pem;
更新完证书之后又把域名绑定到负载均衡器上
https://letsencrypt.org/zh-cn/docs/rate-limits/
每个账户每小时每域名有最多验证失败 5 次的限制。该限制次数在测试环境中更高(每小时允许 60 次验证失败)
每个注册域名每周最多 5 张重复证书的限制
所以在我反复使用certbot renew命令的时候可能会出现达到上限的提示,过一段时间之后再尝试就可以了
最终我只是进行了证书迁移和更新,但是这样的操作后续更新还是会有问题(需要把域名绑定到对应的服务器ip上),还是比较麻烦的。
后续会继续研究下,如果有好的解决方案会更新博客。如果大家有处理过类似的问题也可以分享下
参考资料:
Installing snap on Red Hat Enterprise Linux (RHEL)
None of the above on CentOS/RHEL 8