使用ACME申请域名证书并自动续期

admin
2022-09-03 / 0 评论 / 1,070 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2023年11月19日,已超过367天没有更新,若内容或图片失效,请留言反馈。

ZeroSSL 和 Buypass 在 acme 端都有提供别具特色的证书服务。ZeroSSL 与 Let‘s Encrypt 功能重合且没有签发速率限制,Sectigo 的根证书以及网站管理页面也是不错的加分项。至于 Buypass,其能够免费签发 180 天的 DV 单域名证书,与亚信等用途类似不过并不需要实名认证或者手机号之类的敏感信息。

之前不少人都是直接在 freessl.org 进行签发,后来改版之后就只剩下付费的选择了。而 ACME 在设计上更倾向于证书托管自动更新的方式,而像我这种临时签发证书测试或者用在一些不能使用 ACME 的平台上时,手动签发还是有一定的意义。

安装 ACME 的服务器要跟 Buypass 和 ZeroSSL 的 API 能够稳定通信,我这里就用的腾讯云香港 24 的轻量作为演示,不仅国内操作比较稳定而且国际方向速度也很快。前段时间宝塔发布了腾讯云定制版,然后赠送了很多的轻量代金卷,选择轻量的大佬应该不在少数。

一、安装 ACME

只需要执行一下这条命令就可以一键安装,然后我并没有把证书托管到他自动化所以就直接在 crontab -e 将它的计划任务注释掉了。

curl https://get.acme.sh | sh -s email=username@example.com
刷新 shell 变量配置
source ~/.bashrc
开启自动更新
acme.sh --upgrade --auto-upgrade
导入 Cloudflare API Token,多个DNS区域,该帐户 ID 可以通过 Cloudflare 仪表板找到,作为登录时 URL 的末尾,或者在任何区域的概述页面上的右侧边栏中区域 ID 下方找到。
export CF_Token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
export CF_Account_ID="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
导入 Cloudflare API Token,单个DNS区域,该区域 ID 可以通过 Cloudflare 仪表板在区域概述页面的右侧边栏中找到。
export CF_Token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
export CF_Zone_ID="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

导入腾讯云 API3.0
export Tencent_SecretId="AKIDxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
export Tencent_SecretKey="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
导入DNSPod.cn 域名 API,要求您首先登录您的帐户以获取 DNSPod API 密钥和 ID
export DP_Id="<id>"
export DP_Key="<key>"
显示当前用户的所有环境变量
printenv
# 或
env
添加系统级环境变量(需root权限、针对所有用户、永久生效)
vim /etc/profile
export PATH="/opt/STM/STLinux-2.3/devkit/sh4/bin:$PATH"
source /etc/profile
使用unset删除指定的环境变量
export TEST="Test..."            #增加一个环境变量TEST 
env|grep TEST                    #此命令有输入,证明环境变量TEST已经存在了
TEST=Test... 
unset  TEST                     #删除环境变量TES
env|grep TEST                    #此命令没有输出,证明环境变量TEST已经删除

二、配置 API

目前 acme.sh 支持四个正式环境 CA,分别是 Let’s Encrypt、Buypass、ZeroSSL 和 SSL.com,默认使用 ZeroSSL,如果需要更换可以使用如下命令:

简单来说,如果没有特殊需求,可以选择 Let’s Encrypt,如果服务器在国内,可以选择 ZeroSSL 或 Buypass,如果愿意付费得到更好的服务和保障,可以选择 ZeroSSL 和 SSL.com,如果面向欧盟用户,可以选择 Buypass 和 ZeroSSL。

注意:经过测试 Google Public CA 的 ACME 验证域名在国内是无法访问的,只有国外服务器才可以申请,申请完成后的证书并无影响。

#切换 Let's Encrypt
acme.sh --set-default-ca --server letsencrypt
#切换 Buypass
acme.sh --set-default-ca --server buypass
#切换 ZeroSSL
acme.sh --set-default-ca --server zerossl
#切换 SSL.com
acme.sh --set-default-ca --server ssl.com
#切换 Google Public CA(Google Public CA 需要按照官方博客申请内测,然后获取 Key)
acme.sh --set-default-ca --server google

ZeroSSL 获取 EAB 凭证,在此注册并获取 https://app.zerossl.com/developer 。然后执行以下命令将账户信息导入 ACME 。

acme.sh --register-account --server zerossl --eab-kid [账户 eab-kid] --eab-hmac-key [账户 eab-hmac-key]

BuyPass 申请免费多域名 SSL 证书及ZeroSSL证书申请

Buypass 则只需要注册一下账户即可。

acme.sh --server https://api.buypass.com/acme/directory --register-account --accountemail [你的邮箱]

BuyPass 申请免费多域名 SSL 证书及ZeroSSL证书申请

三、签发证书

DNS 手动模式进行签发

首先执行 issue 进行签发它会返回错误信息告诉你没有正确添加 DNS 记录。

acme.sh --server https://api.buypass.com/acme/directory --issue -d [你的域名] --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please

然后按照他的错误信息手动去 DNS 添加完,再执行一次 renew 就可以正确签发了。

acme.sh --server https://api.buypass.com/acme/directory --renew -d [你的域名] --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please

对于 ZeroSSL,只需要把前面的—server 换成 zerossl,并且可以包含多个域名进行签发,例如下面这样

acme.sh --server zerossl --issue -d [你的域名 1] -d [你的域名 2] --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please

手动进行 file 验证则把包括--dns 后的内容全部换为-w [验证文件目录]即可,比如下面这样。手动把验证文件复制到你网站目录下,然后和 dns 方式一样 renew 一次验证就可以了。

acme.sh --server zerossl --issue -d [你的域名 1] -d [你的域名 2] -w [验证文件目录]

签发后的证书在你的用户文件夹下 .acme.sh 文件夹下面,fullchain.cer 是你的完整证书,.key 就是你的密钥文件。之后续签这个证书依然可以使用上面的 renew 指令,在手动添加记录后再进行 renew 即可。

DNS 自动模式签发

RSA算法:国际标准算法,应用较早,最为普及,比ECC算法的适用范围更广,兼容性更好,一般采用 2048 位的加密长度,但是对服务端性能消耗高。

ECC算法:中文名称为椭圆加密算法,新一代算法趋势主流,一般采用 256 位加密长度,加密速度快,效率更高,对服务器资源消耗低,而且最重要的是更安全,抗攻击型更强。

如果要签发单域名证书,可以使用:

acme.sh --issue --dns dns_cf -d test.demo.com
acme.sh --issue --dns dns_tencent -d test.demo.com
acme.sh --issue --dns dns_dp -d test.demo.com

如果要签发泛域名证书,记得需要同时添加 demo.com和*.demo.com

acme.sh --issue --dns dns_cf -d test.demo.com -d *.domain.com
acme.sh --issue --dns dns_tencent -d test.demo.com -d *.demo.com
acme.sh --issue --dns dns_dp -d test.demo.com -d *.demo.com

运行后,acme.sh 将自动为您的域名申请证书,并将证书文件保存在~/.acme.sh/example.com/目录下,并且会自动为您的域名配置证书自动续期任务,无需手动续期。运行结果如下:

四、自动刷新证书

安装 acme.sh 时会自动创建一个 cronjob,每天定期检查所有证书,如果证书需要更新会自动更新证书。
通过 crontab -l 查看 crontab 任务:
若无定时任务,加之如下,对应路径改一下

17 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

五、其他

如果要撤销一个证书,使用:

acme.sh --list
acme.sh --revoke -d domain.tld
acme.sh --revoke -d domain.tld --ecc

如果要删除一个证书,使用:

acme.sh --list
acme.sh --remove -d domain.tld
acme.sh --remove -d domain.tld --ecc

强制刷新证书

acme.sh --renew -d domain.tld --force
acme.sh --renew -d domain.tld --ecc --force
1

评论

博主关闭了所有页面的评论