网站一直以来都是使用的Let's Encrypt SSL证书,主要是因为Let's Encrypt浏览器兼容性较好,支持ACME自动化部署,支持泛域名证书等,但是今天起网站开始放弃Let's Encrypt证书,全站更换ZeroSSL提供的SSL证书。
为什么放弃Let's Encrypt证书?
由于Let's Encrypt证书的OCSP验证域名由于未知原因无法访问,不过网站前一阵子给服务器开启了OCSP装订,变相解决了部分浏览器访问缓慢的问题;
但是经过测试,发现有些浏览器,比如IOS端 Chromium 系的浏览器:Chrome、新版Egde等,就算服务器开启了OCSP装订,还是会去强制访问OCSP验证证书有效性,虽然超时时间只有3s,但是问题没有得到解决就很不爽;
不过也没有更好的解决办法了。
并且Let's Encrypt的X3根证书也将到期,之后会使用自己签发的根证书,虽然根证书更换后OCSP无法访问的问题会得到解决,但是新的根证书时间太短导致安卓7以下以及16年以前的一些设备没办法信任这个证书导致老设备的兼容性问题;
看来只能更换SSL证书来彻底解决该问题了。
为什么选择ZeroSSL?
经过大佬Luminous推荐,ZeroSSL家的SSL证书可支持ACME自动化部署,并且支持申请泛域名证书,所以准备考虑切换到这家CA的证书;
ZeroSSL的证书之前也听说过,没有考虑的原因是之前我点开价格后发现免费用户只能签3个单域名证书,其他的类型证书都是收费的(贫穷限制了我的想象力);
不过也怪我研究不够深入,在ACME文档的介绍中发现,通过ACME自动部署的方式,可以进行无限制的签发普通域名、多域名证书、甚至通配证书等,并且可以acme.sh脚本官方也支持直接将CA切换到ZeroSSL,直接一键就可以完成证书的切换!
既然更换证书的成本这么低了,那何乐而不为呢?
接下来就准备直接将acme.sh的证书由默认的Let's Encrypt CA切换到ZeroSSL CA;
更换ACME.sh的CA为ZeroSSL
这里我的证书是使用acme.sh统一管理的,并且acme.sh官方也支持切换CA到ZeroSSL;
acme.sh
的安装可参考官方文档:https://github.com/acmesh-official/acme.sh/wiki/How-to-install
下文主要是通过DNS的方式进行证书的签发,该方式在签发证书的时候会自动在dns解析中添加验证域名需要的解析,并且在验证完毕后会自动删除解析;acme.sh
目前支持 cloudflare, dnspod, godaddy 以及 ovh 等数十种解析商的自动集成
配置很简单,只需将自己dns服务商提供的dnsapi配置到环境变量中即可
由于之前在使用Let's Encrypt的时候已经配置过,在此就不进行过多阐述dnsapi
具体配置可参考官方文档:
传送门:https://github.com/acmesh-official/acme.sh/wiki/dnsapi
下面将acme.sh
申请的证书由默认的Let's Encrypt更改为ZeroSSL
1.访问账户注册页面注册一个ZeroSSL账户
传送门:https://app.zerossl.com/signup
2.获取账户的EAB凭证,用来注册acme帐户
传送门:https://app.zerossl.com/developer
点击生成会生成你的eab-kid和eab-hmac-key,复制保存下来;
3.注册ACME帐户
acme.sh --register-account --server zerossl \
--eab-kid 你的eab-kid \
--eab-hmac-key 你的eab-hmac-key
4.切换默认CA
接下来你就可以添加--server zerossl
指令来签发新的证书了,如下:
acme.sh --server zerossl --issue --dns dns_dp -d ffis.me -d *.ffis.me
或者直接切换acme.sh的默认CA为ZeroSSL
acme.sh --set-default-ca --server zerossl
5.签发新证书,这里我签发的是泛域名证书
acme.sh --issue --dns dns_dp -d ffis.me -d *.ffis.me
签发完毕后证书会保存在/root/.acme.sh
目录下,我们一般不直接访问此目录
6.安装新证书
acme.sh --install-cert -d ffis.me \
--key-file /usr/local/nginx/conf/ssl/ffis.me.key \
--fullchain-file /usr/local/nginx/conf/ssl/ffis.me.crt \
--reloadcmd "systemctl force-reload nginx.service"
以上命令会将证书复制到nginx指定目录下,并且强制重新加载nginx,并且以后每次自动续期都会自动执行以上逻辑;
安装完毕后,我们修改网站nginx配置文件中ssl证书文件地址为上面的安装地址即可。
经过如上操作,我的SSL证书就更换为ZeroSSL家的证书了!
这样OCSP无法访问的问题也就迎刃而解了,当然也可以自己去配置OCSP装订和手动预缓存,来提高加载速度
还有一个疑问是,配好泛域名证书后,如何把证书更新到其他服务器节点,这个要自己来实现吗?
最简单的方式是每台机器都单独申请,不过单日申请会有次数限制,所以最好不要集中一天申请和续期;当然也可以自己实现中心机器下发证书的逻辑,这个就需要自己写服务实现了
谢谢,get到了
文章签发泛域名证书的时候采用了dns认证,执行这个流程需要dns api或者手动添加解析值,这个步骤是不是忽略了
是的,确实需要先把dns ak填入acme才可以直接通过acme自动申请,这里主要介绍切换ca,我补一下之前Let's Encrypt签发的链接
一如既往的不能用 acme.sh 申请 ZeroSSL 的通配证书,服务器切换到 LE 完全正常。
谢谢,发现新大陆!回头试一下
用了zerossl, 现在都续定不了,脚本执行都是成功的,但下载来的证书文件还是以前的
我也是,不过我在作者开发者社区已经发现有人反馈了该问题,按理说作者应该已经修复了,不知为何该问题会再现。有人发现是acme.sh的配置中使用的是旧的证书地址,因此下载的依然是旧的证书文件。
好像 acme 申请不了 ZeroSSL 通配证书了吧?我试了好多次,验证完 DNS 后就提示失败。
好像确实是不能通过acme申请统配型的证书了,我的也是Verifying 后面就等,然后超时
我所有的站点都用的ZeroSSL,应该是可以使用的,如果DNS验证完失败,可能是DNS等待时间过长导致的,默认等待时间好像是600s,可以手动指定为120s试一下,使用参数--dnssleep 120
验证域名环节,主域名和通配域名的验证,都出绿字 Success 了,然后下一步就是 Removing DNS records. 在后来就是 Verify finished, start to sign,出红字 Sign error, wrong status 就失败了。用你的方法登陆或者 --register-account -m mail.com --server zerossl 也不行。都是一样。
装了ssl后,PC端百度分享代码不显示了。
这个是国人的啊
其名下还有迷妹导航
估计是周红衣
ZERO用浏览器可以打开,但是用acme脚本超时。lets就一把更新了。
90天, 过期了怎么操作? 没找到自动续的入口。
acme.sh 会自动添加crontab定时任务自动续期的
这个证书,宝塔计划任务中的curl命令不支持
宝塔估计没有添加对ZeroSSL证书的支持,这种方法是自己通过SSH终端链接时使用的