必要背景说明
  • 阿里云免费获取 ssl 证书是 20 个 3 个月的有效期,多个证书的创建以及获取的时间是不一致的,导致感觉很繁琐, acme.sh 可以解决这个问题

  • 可以选择证书的 CA 运营商, 默认是 ZeroSSL, 我根据网上的脚本修改为 Let’s Encrypt , 但后面我发现这个是存在限制的。它们的差异比较 参考信息; 关于使用 ZeroSSL 的配置参考这里

    image-20250712195200093

  • Let’s Encrypt 存在限制, 但实际个人使用基本不用关注它,可以简单的理解为 7 天 5 次证书。当然不止如此, 这里是具体的限制说明

    image-20250712195654544

具体实操
安装 acme.sh

项目本身存在中文基本使用说明, 按照说明文档中的存在以下方式:

curl https://get.acme.sh | sh -s email=my@example.com

wget -O -  https://get.acme.sh | sh -s email=my@example.com

然而事实上在国内很难访问, 并且在 https://get.acme.sh 中也存在 https://github.com/acmesh-official/acme.sh/wiki/Install-in-China 这个地址的引导到 https://gitee.com/neilpang/acme.sh, 那么就通过获取 git 库在进行安装的方式

git clone https://gitee.com/neilpang/acme.sh.git
cd acme.sh
./acme.sh --install -m my@example.com

image-20250712201304755

关于 alias 我使用的是 zsh, 它在 .zshrc 中添加了 . "/root/.acme.sh/acme.sh.env"

更换 CA 服务商(可选)
acme.sh --set-default-ca --server letsencrypt

关于这里, 文档说明了 ZeroSSL 一个可能出现的问题, 会一直出现 Pending,The CA is processing your order,please just wait., 而 Let's Encrypt 会出现的概率要小很多。

image-20250712202126206

参与文档地址 以及文中说明高级用法地址 (英文)

生成证书

我的需求仅是将阿里云的域名进行自动化获取, 没有兴趣对它进行深度研究,只关注它的自动验证并获取证书;也可以通过这个更详细的笔记博客进行查看手动方式

获取阿里云密钥并授权后

export Ali_Key="你的 key"
export Ali_Secret="你的 secret"
acme.sh --issue --dns dns_ali -d my@example.com

然后他就会去帮你在阿里云中的域名解析中临时创建 _acme-challenge.my 然后删除它,你会收到阿里云的站内信提醒你删除。

安装(复制)证书

这里的输出的文件名和路径并没有严格的要求, 按照你实际管理的路径和文件名即可。例如使用 Nginx, 配合它的配置进行设置路径和文件名等,我用的是 Nginx。

acme.sh --install-cert -d my.example.com \
--key-file       /path/to/keyfile/in/nginx/my.example.com.key  \
--fullchain-file /path/to/fullchain/nginx/my.example.com.crt \
--reloadcmd     "service nginx force-reload"

image-20250712204306338

后续的其他说明

一开始我以为它的证书数量也是 20次/年, 证书的有效时长是 3 个月, 2 个月就会更新, 就疯狂的寻找,让重新获取证书的时间为 87 天, 然后发现 --days 以及 --valid-to --valid-from 等参数其中 --days 控制本地重新获取新证书的操作, --valid-to--valid-from 是对证书时效的操作。但是 Let’s Encrypt ZeroSSL 没有 20次/年 的限制, 那么就无所谓了。