前言

Acme.sh和CertBot 都是常用于自动化申请SSL证书的工具,当然,也可以用来手动申请。

我个人更经常需要手动部署,所以本文还是以手动申请ZeroSSL的SSL证书为例,当然,使用的是Acme.sh。

一般来说在Linux环境下运行比较好,操作简单快捷。

其官网是 https://github.com/acmesh-official/acme.sh

ACME支持度

ACME支持很多常见的SSL证书品牌。

包括但不限于 LE(Let's Encrypt)、ZeroSSL 、BP(Buypass)、Google等。

本来我是打算用来测试GoogleSSL的,结果2天了还没给我批权限,群友说可能谷歌快结束内测了,不批了,早知道不偷懒了。

可参考这些文档:

https://github.com/acmesh-official/acme.sh/wiki/BuyPass.com-CA

https://github.com/acmesh-official/acme.sh/wiki/Change-default-CA-to-ZeroSSL

https://github.com/acmesh-official/acme.sh/wiki/CA

CA MaxLifetime ECC Domain Count Wildcard IPv4 IPv6 NotAfter
Let's Encrypt 90 Yes 100 Yes No No No
ZeroSSL 90 Yes 100 Yes No No Yes
Google 90 Yes 100 Yes No No Yes
Buypass 180 Yes 5 Paid No No No
SSL.com 90 Yes 2 Paid No No No
HiCA 180 Paid 10 (1 if Wildcard) Yes Yes Yes No

ZeroSSL证书

ZeroSSL的官网是 https://zerossl.com/

官网也有提供一些服务,但是对免费用户不怎么友好(大部分功能没有)

但是ACME下可以免费使用主要功能(反而在官网浏览器申请要钱,真智商税) 可阅读 https://zerossl.com/features/acme/

需要注意的是,他家自营的SSL业务,并不算特别老牌。

在ACME工具可实现和上文一致的免费、多域名、多通匹符(也叫通配符) SSL证书。

同时优势还有不需要额外注册,填一个邮箱即可,证书默认是AT国(如果是腾讯云、51SSL等方式申请TA证书那肯定是有实名马脚的)

OCSP地址是 http://zerossl.ocsp.sectigo.com 用的的CloudFlare的泛播双IP,只能说很普通,中国大陆CF出现异常也很正常。

安装

相当于浏览器生成,工具脚本申请证书在这方面就有一丁点上手门槛

curl https://get.acme.sh | sh

然后就自动安装了

默认目录是 /root/.acme.sh/

cd /root/.acme.sh/

然后就安装完成了

如果你要用Zero SSL,最好先配置注册一下,免得出现如图所示的错误

命令参考是

acme.sh --set-default-ca --server zerossl
acme.sh --register-account -m [email protected]

手动申请

网上自动的方法不少(指的是自动续订、DNSAPI申请),但是手动申请的倒是不是很清楚,所以最好还是看官方文档。

https://github.com/acmesh-official/acme.sh/wiki/dns-manual-mode

如下文命令所示,依次填写你需要的域名,默认第一个是主域名(会生成一个文件夹),记得换域名啊

acme.sh --issue -d 'google.com' -d '*.google.com' -d 'baidu.com' -d '*.baidu.com' --dns \
 --yes-I-know-dns-manual-mode-enough-go-ahead-please

当然去掉引号也是欧克的

acme.sh --issue -d google.com -d *.google.com -d baidu.com -d *.baidu.com --dns \
 --yes-I-know-dns-manual-mode-enough-go-ahead-please

一般来说去掉末尾的P话也没啥问题

acme.sh --issue -d google.com -d *.google.com -d baidu.com -d *.baidu.com --dns

如果有BUG/报错也可以考虑在DNS后加个dns-01

acme.sh --issue -d google.com -d *.google.com -d baidu.com -d *.baidu.com --dns  dns-01

运行上述任意命令后即可如图所示

这里就告诉你需要验证的域名和txt变量了,每个域名项目都需要设置一次txt解析

比如华为云是这样,记得要能同时响应两个TXT(若有),而不是随机一个TXT

如果你配置了多个CNAME,且值不等,比如我之前忘记删除上一次的了,就会如图所示

然后就失败了,所以一定要检查一下有没有问题,比如冲突覆盖,不然浪费不少时间

然后你看到ACME叫你用Renew,记得别傻乎乎的直接加,不然就会这样

正确的命令是

acme.sh --renew -d 'google.com' -d '*.google.com' -d 'baidu.com' -d '*.baidu.com' \
  --yes-I-know-dns-manual-mode-enough-go-ahead-please

当然,也可以和上面一样的简化,比如

acme.sh --renew -d google.com -d *.google.com -d baidu.com -d *.baidu.com

(如果报错请用带后缀的)

acme.sh --renew -d google.com -d *.google.com -d baidu.com -d *.baidu.com \
  --yes-I-know-dns-manual-mode-enough-go-ahead-please

然后正常的输出就如图所示

然后去本地的文件找一下要的东西即可

默认是在主域名的文件夹里面

把第一个cer和第四个csr连起来就是SSL要的PEM了,当然,这个你也可以用Fullchain.cer的那个,这两个都能用

然后密钥自然就是第五个key。

然后丢进去用就行了