使用 acme.sh 签发 ZeroSSL ECC Domain Secure Site CA 域名证书

几日前因Buypass Go SSL签发失败转而“退而求其次”改用ZeroSSL RSA Domain Secure Site CA的域名证书来实现HTTPS功能,这不是三个月之期已到又是需要折腾签发新的域名证书的一天了嘛!

一开始还是不死心想着再试试Buypass Go SSL能否给这个域名(cyzwb.com)签发成功的,可惜的是依旧给出一样的错误(报错信息:All authorizations were not finalized by the CA.。)。三个月前的时候经过几次尝试都是以失败告终,当时不免怀疑是不是CA机构的免费策略有所修改的原因,问题是在后面的使用中发现另外一个域名能成功签发出180天的域名证书,就不得不怀疑是不是跟所使用的DNS托管商有关系?更近这几天的再次搜索得到的结果就是无法获取到对应的TXT记录的原因,我虽有切换过DNS托管商进行验证,但所切换的托管商中我均是使用的是无境外节点的免费套餐,想要进一步验证要不就是换一个境外的DNS托管商要不就是购买含有境外节点的DNS套餐方可进一步的验证问题所在。

折腾过一次切换DNS就暂时不想再折腾,这不就是要从只有90天的SSL证书中进行抉择。关键的是在ZeroSSL的Web界面上只有3个证书的签发额度,看着不停的发来的域名到期邮件但额度却一直也没刷新。实在是等不及了就在ZeroSSL的证书快到期的前一天,再次“退而求其次的”选择了Let’s Encrypt签发的ECC证书来实现HTTPS功能。这次选择Let’s Encrypt主要原因是有收到过其发的邮件,这样也就意味着我的邮箱地址在其系统中是有记录的,这样就无需再纠结注册账号与否这些杂七杂八的问题。

早已知晓过acme.sh这一自动化工具,但我之前主要是使用Certbot签发Buypass Go SSL证书的就没有进一步了解,这不因为不愿折腾命令行就转而使用第三方Web界面来“辅助”签发Let’s Encrypt的证书。有使用过环境面板自带的自动化签发或者是其他第三方Web的,不太记得有没有折腾过命令行的方式了。

本次所使用的第三方Web工具可以当场创建新的私钥提交或者是使用的是自定义生成的私钥提交,通过所提交的私钥区分是RSA还是ECC类型的证书,而之前所用到的Certbot签发的Buypass Go SSL证书是可以通过所使用的自定义生成的CSR文件判断RSA还是ECC的。当然这只是我的一个猜测其是通过如此区别证书类型,当我感到不解的是为什么一个提交私钥一个确实提交CSR就行(暂时不知道命令行的情况)。

至于生成的CSR与密钥对又是用另外一个我常用的第三方软件生成的,前面所使用到的一般都是用该软件本地生成,但是下面所提到的 ZeroSSL ECC Domain Secure Site CA 域名证书就因为各种原因暂时用不到。原因就是急于求成暂时没有深入了解acme.sh的各种参数,想着先试试水来着。

看着域名证书都已经全部过期还没刷新的额度,刺眼的3/3深深的迫害着我的强迫症之心,我甚至一度萌生出是不是干脆点击删除账号重新来过的念头。但是转念一想其通过ACME协议签发的数量是没有限制的(目前来说),是不是可以删除账号后重新注册一个新账号专门走ACME协议申请。转念一想不知道ZeroSSL的删除策略(用户协议)担心删除过后不能或者是短时间内不能重复使用一样的邮箱注册新的账号,或者是说用旧邮箱注册后删除前的数据还会关联上之类的云云,并且要使用ACME还要在上面申请一个EAB什么来与之关联来的,干脆就先用这个acme.sh试试效果后再决定是不是要删除账号重新关联。

秉承着这个念想之下就开始了下面的一些申请操作:

1、安装acme.sh

curl https://get.acme.sh | sh -s email=admin@xxx

admin@xxx:邮箱地址,这里我使用的邮箱与在ZeroSSL上的账号相同,如果需要在多个CA中都申请域名证书或许都会用一个邮箱吧。

输出:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1032    0  1032    0     0   3470      0 --:--:-- --:--:-- --:--:--  3474
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  221k  100  221k    0     0  1412k      0 --:--:-- --:--:-- --:--:-- 1420k
[Fri Jul  4 01:53:35 EDT 2025] Installing from online archive.
[Fri Jul  4 01:53:35 EDT 2025] Downloading https://github.com/acmesh-official/acme.sh/archive/master.tar.gz
[Fri Jul  4 01:53:36 EDT 2025] Extracting master.tar.gz
[Fri Jul  4 01:53:36 EDT 2025] Installing to /root/.acme.sh
[Fri Jul  4 01:53:36 EDT 2025] Installed to /root/.acme.sh/acme.sh
[Fri Jul  4 01:53:36 EDT 2025] Installing alias to '/root/.bashrc'
[Fri Jul  4 01:53:36 EDT 2025] Close and reopen your terminal to start using acme.sh
[Fri Jul  4 01:53:36 EDT 2025] Installing alias to '/root/.cshrc'
[Fri Jul  4 01:53:36 EDT 2025] Installing alias to '/root/.tcshrc'
[Fri Jul  4 01:53:36 EDT 2025] Installing cron job
no crontab for root
no crontab for root
[Fri Jul  4 01:53:36 EDT 2025] bash has been found. Changing the shebang to use bash as preferred.
[Fri Jul  4 01:53:37 EDT 2025] OK
[Fri Jul  4 01:53:37 EDT 2025] Install success!

就此acme.sh已经下载到本地。

2、在ZeroSSL中注册

/root/.acme.sh/acme.sh --register-account  --server zerossl

这里我取巧了一下,想着与Buypass只提供邮箱账号试试。由于没有链接一个别名,所以要输入完整的路径。

输出:

[Fri Jul  4 01:57:21 EDT 2025] Account key creation OK.
[Fri Jul  4 01:57:21 EDT 2025] No EAB credentials found for ZeroSSL, let's obtain them
[Fri Jul  4 01:57:27 EDT 2025] Registering account: https://acme.zerossl.com/v2/DV90
[Fri Jul  4 01:57:36 EDT 2025] Registered
[Fri Jul  4 01:57:36 EDT 2025] ACCOUNT_THUMBPRINT='**********************************'

没有EAB也能注册成功的说。

3、修改acme.sh的默认服务器

/root/.acme.sh/acme.sh --set-default-ca --server zerossl

其实现在的默认服务器已经是ZeroSSL了,无需多言直接可用,这里只是记录一下方便修改成其他的。

4、申请证书

/root/.acme.sh/acme.sh --keylength ec-384 --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please --issue -d www.cyzwb.com -d cyzwb.com

--keylength:这里需要ECC证书则使用该参数,ec-384私钥长度,可选:ec-256 ec-384 ec-521
-dns:使用DNS的方式验证域名,不知道是否可用不添加。
--yes-I-know-dns-manual-mode-enough-go-ahead-please:手动添加TXT解析记录,不想使用API接口进行自动化更新(因为申请的机器不是部署WEB的机器)。
-d:后面就是要申请证书的域名。

输出:

[Fri Jul  4 02:10:26 EDT 2025] Using CA: https://acme.zerossl.com/v2/DV90
[Fri Jul  4 02:10:26 EDT 2025] Creating domain key
[Fri Jul  4 02:10:26 EDT 2025] The domain key is here: /root/.acme.sh/www.cyzwb.com_ecc/www.cyzwb.com.key
[Fri Jul  4 02:10:26 EDT 2025] Multi domain='DNS:www.cyzwb.com,DNS:cyzwb.com'
[Fri Jul  4 02:10:43 EDT 2025] Getting webroot for domain='www.cyzwb.com'
[Fri Jul  4 02:10:43 EDT 2025] Getting webroot for domain='cyzwb.com'
[Fri Jul  4 02:10:43 EDT 2025] Add the following TXT record:
[Fri Jul  4 02:10:43 EDT 2025] Domain: '_acme-challenge.www.cyzwb.com'
[Fri Jul  4 02:10:43 EDT 2025] TXT value: 'E5rTc0JKuST9Kb5gqepHvYP4ao8RKw-idl4EAsoeJYg'
[Fri Jul  4 02:10:43 EDT 2025] Please make sure to prepend '_acme-challenge.' to your domain
[Fri Jul  4 02:10:43 EDT 2025] so that the resulting subdomain is: _acme-challenge.www.cyzwb.com
[Fri Jul  4 02:10:43 EDT 2025] Add the following TXT record:
[Fri Jul  4 02:10:43 EDT 2025] Domain: '_acme-challenge.cyzwb.com'
[Fri Jul  4 02:10:43 EDT 2025] TXT value: 'yGkT95C1jws-78XFBV7M_nrN0g113DUqmxAd5ho6xVQ'
[Fri Jul  4 02:10:43 EDT 2025] Please make sure to prepend '_acme-challenge.' to your domain
[Fri Jul  4 02:10:43 EDT 2025] so that the resulting subdomain is: _acme-challenge.cyzwb.com
[Fri Jul  4 02:10:43 EDT 2025] Please add the TXT records to the domains, and re-run with --renew.
[Fri Jul  4 02:10:43 EDT 2025] Please add '--debug' or '--log' to see more information.
[Fri Jul  4 02:10:43 EDT 2025] See: https://github.com/acmesh-official/acme.sh/wiki/How-to-debug-acme.sh

由于没有走API自动化更新,需要手动去添加/修改对应的解析记录。

5、验证TXT

添加/修改对应的TXT记录后再次执行

/root/.acme.sh/acme.sh --keylength ec-384 --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please --issue -d www.cyzwb.com -d cyzwb.com --renew

主要是附带上--renew参数,将再次去去验证对应的TXT记录是否已经生效。我刚开始就是因为修改错域名导致需要重试二三次才能刷新DNS缓存后验证通过。

输出:

[Fri Jul  4 02:18:00 EDT 2025] The domain 'www.cyzwb.com' seems to already have an ECC cert, let's use it.
[Fri Jul  4 02:18:00 EDT 2025] Renewing: 'www.cyzwb.com'
[Fri Jul  4 02:18:00 EDT 2025] Renewing using Le_API=https://acme.zerossl.com/v2/DV90
[Fri Jul  4 02:18:01 EDT 2025] Using CA: https://acme.zerossl.com/v2/DV90
[Fri Jul  4 02:18:01 EDT 2025] Multi domain='DNS:www.cyzwb.com,DNS:cyzwb.com'
[Fri Jul  4 02:18:01 EDT 2025] Verifying: www.cyzwb.com
[Fri Jul  4 02:18:12 EDT 2025] Processing. The CA is processing your order, please wait. (1/30)
[Fri Jul  4 02:18:16 EDT 2025] Success
[Fri Jul  4 02:18:16 EDT 2025] Verifying: cyzwb.com
[Fri Jul  4 02:18:21 EDT 2025] Processing. The CA is processing your order, please wait. (1/30)
[Fri Jul  4 02:18:28 EDT 2025] Success
[Fri Jul  4 02:18:28 EDT 2025] Verification finished, beginning signing.
[Fri Jul  4 02:18:28 EDT 2025] Let's finalize the order.
[Fri Jul  4 02:18:28 EDT 2025] Le_OrderFinalize='https://acme.zerossl.com/v2/DV90/order/********/finalize'
[Fri Jul  4 02:18:34 EDT 2025] Order status is 'processing', let's sleep and retry.
[Fri Jul  4 02:18:34 EDT 2025] Sleeping for 15 seconds then retrying
[Fri Jul  4 02:18:50 EDT 2025] Polling order status: https://acme.zerossl.com/v2/DV90/order/********
[Fri Jul  4 02:18:56 EDT 2025] Downloading cert.
[Fri Jul  4 02:18:56 EDT 2025] Le_LinkCert='https://acme.zerossl.com/v2/DV90/cert/********'
[Fri Jul  4 02:18:58 EDT 2025] Cert success.
-----BEGIN CERTIFICATE-----
************************************
************************************
************************************
************************************
-----END CERTIFICATE-----
[Fri Jul  4 02:18:58 EDT 2025] Your cert is in: /root/.acme.sh/www.cyzwb.com_ecc/www.cyzwb.com.cer
[Fri Jul  4 02:18:58 EDT 2025] Your cert key is in: /root/.acme.sh/www.cyzwb.com_ecc/www.cyzwb.com.key
[Fri Jul  4 02:18:58 EDT 2025] The intermediate CA cert is in: /root/.acme.sh/www.cyzwb.com_ecc/ca.cer
[Fri Jul  4 02:18:58 EDT 2025] And the full-chain cert is in: /root/.acme.sh/www.cyzwb.com_ecc/fullchain.cer

就此成功下发由ZeroSSL ECC Domain Secure Site CA签发的域名证书!

6、题外话
这里我没有指定自定义的CSR生成,有待下次研究。

ChiuYut

2025年07月05日

发布者

ChiuYut

咦?我是谁?这是什么地方? Ya ha!我是ChiuYut!这里是我的小破站!