网站一直以来都是使用的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,但是问题没有得到解决就很不爽; 不高兴.png
不过也没有更好的解决办法了。

并且Let's Encrypt的X3根证书也将到期,之后会使用自己签发的根证书,虽然根证书更换后OCSP无法访问的问题会得到解决,但是新的根证书时间太短导致安卓7以下以及16年以前的一些设备没办法信任这个证书导致老设备的兼容性问题;

看来只能更换SSL证书来彻底解决该问题了。 挖鼻.png

为什么选择ZeroSSL?

经过大佬Luminous推荐,ZeroSSL家的SSL证书可支持ACME自动化部署,并且支持申请泛域名证书,所以准备考虑切换到这家CA的证书;
ZeroSSL的证书之前也听说过,没有考虑的原因是之前我点开价格后发现免费用户只能签3个单域名证书,其他的类型证书都是收费的(贫穷限制了我的想象力);
2020-12-01T15:14:29.png

不过也怪我研究不够深入,在ACME文档的介绍中发现,通过ACME自动部署的方式,可以进行无限制的签发普通域名、多域名证书、甚至通配证书等,并且可以acme.sh脚本官方也支持直接将CA切换到ZeroSSL,直接一键就可以完成证书的切换! 太开心.png
2020-12-01T16:04:01.png

既然更换证书的成本这么低了,那何乐而不为呢? 哈哈.png

接下来就准备直接将acme.sh的证书由默认的Let's Encrypt CA切换到ZeroSSL CA;

更换ACME.sh的CA为ZeroSSL

这里我的证书是使用acme.sh统一管理的,并且acme.sh官方也支持切换CA到ZeroSSL;
2020-12-01T15:52:06.png

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
2020-12-01T15:28:22.png

2.获取账户的EAB凭证,用来注册acme帐户

传送门:https://app.zerossl.com/developer
2020-12-01T15:31:26.png

点击生成会生成你的eab-kid和eab-hmac-key,复制保存下来;

3.注册ACME帐户

acme.sh  --register-account  --server zerossl \
        --eab-kid  你的eab-kid \
        --eab-hmac-key  你的eab-hmac-key

2020-12-01T15:35:14.png

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

2020-12-01T15:38:14.png

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家的证书了!
2020-12-01T15:57:01.png

2020-12-02T05:38:13.png

这样OCSP无法访问的问题也就迎刃而解了,当然也可以自己去配置OCSP装订和手动预缓存,来提高加载速度