acme.sh
是个小巧又强大的工具,用于管理 SSL/TLS 证书。它支持多家 CA(证书颁发机构),但要更换 CA 时,找不到命令就容易抓狂——不过别急,这份教程会带你一步步完成切换,并附上一些调侃,帮你缓解心情!
第一步:查看支持的 CA
你可以参考官方的 Wiki 页面,里面列出了所有支持的 CA。
目前支持的签发机构如下:
Short Name | ACME Server URL | 用途 |
---|---|---|
letsencrypt |
https://acme-v02.api.letsencrypt.org/directory |
主流的 Let’s Encrypt |
letsencrypt_test |
https://acme-staging-v02.api.letsencrypt.org/directory |
测试环境 |
buypass |
https://api.buypass.com/acme/directory |
BuyPass.com CA |
buypass_test |
https://api.test4.buypass.no/acme/directory |
BuyPass.com 测试 |
zerossl |
https://acme.zerossl.com/v2/DV90 |
ZeroSSL.com CA |
sslcom |
https://acme.ssl.com/sslcom-dv-rsa 或 sslcom-dv-ecc |
SSL.com CA |
google |
https://dv.acme-v02.api.pki.goog/directory |
Google Public CA |
googletest |
https://dv.acme-v02.test-api.pki.goog/directory |
Google 测试 CA |
支持的机构还挺多,但选项一多,反而让人迷惑——到底选哪个才合适呢?别纠结,常见用 letsencrypt
或 zerossl
就够了。
第二步:切换 CA
选好了目标 CA 后,用以下命令切换:
|
|
举个例子:
- 如果想用 Let’s Encrypt(经典之选):
1
acme.sh --set-default-ca --server letsencrypt
- 想试试 ZeroSSL(折腾党选择):
1
acme.sh --set-default-ca --server zerossl
吐槽时间:
- 为什么不提供一个交互式界面,比如“请选择你的 CA”,还能更直观些。
- ZeroSSL 非得注册 API 密钥,这种强制登录的体验,总是让我怀疑免费是不是套路。
第三步:确认是否切换成功
命令运行完毕后,最好验证一下当前使用的默认 CA,确保没填错:
|
|
如果看到类似这样的输出:
|
|
或者:
|
|
那就说明切换成功啦!
这命令只会傻乎乎地告诉你“默认 CA 是什么”,也不能附加点提示信息,比如“切换成功,欢迎使用新 CA!”。
第四步:重新签发证书
为了确保新 CA 能正常工作,你需要重新签发一次证书:
|
|
吐槽时间:
- 每次重新签发都得加
--force
,万一忘了,系统就会“假装没听见”,让人浪费时间。 - 配额限制和 API 失败问题经常让人抓狂,比如 Let’s Encrypt 的周签发限制 50 次,感觉总在提醒你“别随便浪费免费资源”。
特殊场景:不同域名用不同 CA
如果需要对某些域名使用特定的 CA,可以直接在签发时指定:
|
|
对于有大量域名的用户,手动配置不同 CA 简直就是“勤劳人的修行”,期待未来能有批量管理功能。
注意事项(必看,防踩坑)
-
ZeroSSL 的 API 密钥
如果你选择 ZeroSSL,需要提前注册账号并获取 API 密钥:1
acme.sh --register-account --server zerossl --accountemail [email protected]
免费证书搞得像个 SaaS 服务,这种“改良”方式真的更好吗?
-
兼容性问题
如果你的服务器很老旧(比如某些根证书都不更新的系统),可能无法支持新 CA 的根证书,比如 ZeroSSL。如果发现 SSL 报错,十有八九是这个问题。 -
重启服务
别忘了重新加载 Web 服务配置,应用新证书:1 2 3 4 5
# 重启 Nginx systemctl reload nginx # 重启 Apache systemctl reload apache2
总结
虽然更换 CA 的流程看似简单,但总是有些小坑会让人抓狂。不过,掌握了上述步骤,你就能快速完成切换,不再被各种错误信息支配。
最后再提醒一句:别忘了对新证书做兼容性测试,别等上线时才发现出问题,那才叫“惊喜”。