切换Acme.sh默认CA至ZeroSSL
Acme.sh 在很久之前发了一个 issue,告知用户将切换其默认 CA 至 ZeroSSL,我个人持无所谓的态度,ZeroSSL 画的这些美好的饼里我唯一感兴趣的大概就是签发频率不受限这一点。之前配置 Caddy SSL 的时候由于不熟悉配置语法直接把 Let’s Encrypt 的 Rate Limit 耗尽了,等了好长一段时间来重签证书。
除此之外,ZeroSSL 相较 Let’s Encrypt 并没有太显著的优势。
准备工作
配置 ZeroSSL 为默认 CA 前,需要先在其官网注册账户,并且获取 EAB 凭证。在终端里输入
acme.sh --register-account --server zerossl \
--eab-kid xxxxxxxxxxxx \
--eab-hmac-key xxxxxxxxx
将 kid 和 key 替换为你在 ZeroSSL 后台 生成的键值对,注意这里标明了每次都是新生成密钥,不会吊销之前的也看不到之前生成过的,因此对于强迫症强烈建议将其保存在你的密码管理工具或安全的地方。
当然如果你对 ZeroSSL 的控制台不感兴趣,也可以直接在终端里输入
acme.sh --register-account -m myemail@example.com --server zerossl
这样会自动帮你注册账户,但你并不知道密码是什么,也许需要重置密码才能登录。
最后,如果你搞错了——我指用了命令行注册账户却发现结果不符合预期,试图再绑定 EAB 凭证时 Acme.sh 会提示你已经注册过了,无需再绑定,这个时候你需要先
rm -rf ~/.acme.sh/ca/zerossl.com
来清除旧的凭证信息,才能重新绑定。
准备工作完成后就可以按照普通方法签发证书了,我是用 DNS API 的方法来签发通配符证书,省的麻烦。
export CF_Key="YOURKEYHERE"
export CF_Email="cloudflare@example.com"
然后再运行
acme.sh --issue --dns dns_cf -d jipai.moe -d *.jipai.moe
不出意外的话证书就签好了,如果不小心搞错了,比如少写了一个域名,可以先 revoke 掉再申请,不用担心 rate limit 限制了。
acme.sh --revoke -d example.com
最后,使用 Acme.sh 的安装命令来复制证书,不要直接使用 Acme.sh 根目录中的证书文件,内部文件结构可能会发生变化。
acme.sh --install-cert -d example.com \
--key-file /path/to/keyfile/in/nginx/key.pem \
--fullchain-file /path/to/fullchain/nginx/cert.pem \
--reloadcmd "service nginx force-reload"