网站一直以来都是使用的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装订和手动预缓存,来提高加载速度
作者大大, 我的nginx是docker部署的,是需要把这里的reloadcmd换成docker restart吗?
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"
zerossl的证书博主使用wget会提示不安全吗?
找到原因了,因为我只把 _acme-challenge 的记录单独托管给三方 DNS 平台,以便使用 acme DNS API 自动更新。而 CAA 记录未托管导致验证通不过。但 acme 也没提示原因,太坑了。
网页端手动续期要收费!
现在已经不支持通倍符证书了吧, 我看官网提示不支持
我刚刚试了,还是支持的。
注册acme.sh账号的用处是?我只注册zerossl账号也没发现缺少什么……
注册下一步卡住 是什么原因
翻出去就好了
dnspod哪个id和key是dnspod后台的dnspodtoken而非腾讯api,注意