网站一直以来都是使用的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证书来彻底解决该问题了。
为什么选择ZeroSSL?
经过大佬Luminous推荐,ZeroSSL家的SSL证书可支持ACME自动化部署,并且支持申请泛域名证书,所以准备考虑切换到这家CA的证书;
ZeroSSL的证书之前也听说过,没有考虑的原因是之前我点开价格后发现免费用户只能签3个单域名证书,其他的类型证书都是收费的(贫穷限制了我的想象力);
不过也怪我研究不够深入,在ACME文档的介绍中发现,通过ACME自动部署的方式,可以进行无限制的签发普通域名、多域名证书、甚至通配证书等,并且可以acme.sh脚本官方也支持直接将CA切换到ZeroSSL,直接一键就可以完成证书的切换
安装 acme.sh
先安装好 curl,然后:
1 | curl https://get.acme.sh | sh |
该安装脚本做了几件事:
- 把 acme.sh 安装到了 home 目录下:
~/.acme.sh/
- 创建了一个 bash 的 alias, 方便使用:
alias acme.sh=~/.acme.sh/acme.sh
- 创建了 cronjob,每天 0:00 点自动检测所有的证书,如果快过期了,则会自动更新证书。
如果因为网络问题,无法连接到 https://raw.githubusercontent.com
域名,则要手动更改安装脚本内容:
1 |
|
注册 ZeroSSL 账号
acme.sh 默认使用 Let’s Encrypt 进行证书注册,本本章使用 ZeroSSL 进行注册,所以需要进行相关配置
官网注册:https://zerossl.com/
注册完成之后进入 Dashboard,选择右侧的 Developer 标签,生成 EAB Credentials 并记录下来。
将 acme.sh 的注册服务器改为 ZeroSSL
文档:https://github.com/acmesh-official/acme.sh/wiki/ZeroSSL.com-CA
运行,替换 eab-kid
和 eab-hmac-key
为上一步中生成的:
1 | acme.sh --register-account --server zerossl \ |
将其设置为默认 Server
1 | acme.sh --set-default-ca --server zerossl |
签发证书
本文章使用 DNS 验证的方法来验证域名,acme.sh 可以通过 DNS 提供商的 API 自动设置验证记录,具体用法详见文档:https://github.com/acmesh-official/acme.sh/wiki/dnsapi
1 | acme.sh --issue \ |
其中:
--dns
指定 DNS 服务商,dns_dp
代表 DNSPod,还有dns_cf
代表 CloudFlare,更多的字段见 https://github.com/acmesh-official/acme.sh/tree/master/dnsapi
如果不使用 API 自动添加验证,则不用添加后续参数,如:acme.sh --issue --dns -d sundayhk.com ....
-d *.sundayhk.com
表示签发泛域名证书--keylength ec-256
表示签发 ECC 证书,不添加则签发 RSA 证书,可选参数还有ec-384
和ec-521
安装证书
使用 --install-cert
命令安装证书到指定目录,切记不要手动去复制签发的证书文件,会影响后续使用
1 | acme.sh --install-cert -d sundayhk.com --ecc \ |
其中:
--ecc
表示安装 ECC 证书--key-file
和-fullchain-file
后接想要安装到的目录及证书名--reloadcmd
后接服务的重启命令,程序自动续期证书后会运行该命令使其生效
大功告成!
更多信息可参考如下: