跳到主要内容

AutoSSL.sh 自动化证书教程

AutoSSL.sh 是用于自动化管理 SSL 证书生命周期的命令行客户端,参数风格接近 acme.sh,但它对接的是平台 REST API,不是标准 ACME 协议。它适合在服务器、CI/CD 或运维脚本中完成证书签发、验证、下载、部署、续费、重签和吊销。

典型流程如下:

  1. 安装 autossl.sh 和依赖。
  2. 绑定平台 API Key 到当前服务器。
  3. 使用 DNS 或 HTTP 验证签发证书。
  4. 保存部署参数,让后续续费和补发自动复用。
  5. 安装 Cron,定期检查即将到期或需要补发的证书。

准备工作

  • Linux 或 macOS 服务器。
  • 已安装 bashcurljqopenssl
  • 控制台账户余额充足。
  • 已创建 API Key,并把当前服务器公网 IP 加入白名单。
  • DNS 验证需要 DNS 服务商 API 凭据;HTTP/IP 证书验证需要可被公网访问的 Webroot 目录。

安装客户端

建议安装到 /usr/local/bin/autossl.sh,后续所有命令都以该路径为准。

# Debian / Ubuntu
sudo apt-get update
sudo apt-get install -y curl jq openssl unzip

# CentOS / RHEL / AlmaLinux / Rocky
sudo yum install -y curl jq openssl unzip

# macOS
brew install curl jq openssl

下载并授权执行:

sudo curl -L \
-H "Referer: https://www.anquanssl.com" \
-o /usr/local/bin/autossl.sh.zip \
"https://static.trustserver.cn/assets/autossl.sh.zip"

sudo unzip -o /usr/local/bin/autossl.sh.zip -d /usr/local/bin/
sudo rm -f /usr/local/bin/autossl.sh.zip
sudo chmod +x /usr/local/bin/autossl.sh

确认安装结果:

autossl.sh --version
autossl.sh --help

默认数据目录是 ~/.autossl/,可通过 AUTOSSL_HOME 自定义:

~/.autossl/
├── account.conf
├── certs/
├── certs-backup/
└── cron.log

绑定 API 账号

首次使用需要把平台 API Key 保存到当前服务器。命令会写入 ~/.autossl/account.conf,后续签发、续费、重签和吊销会自动读取。

autossl.sh --register-account \
-m your-email@example.com \
--eab-kid YOUR_ACCESS_KEY_ID \
--eab-hmac-key YOUR_ACCESS_KEY_SECRET

正常使用无需传 --server。只有对接私有部署、特殊分销站 API 或本地测试环境时,才需要显式指定 API 地址:

autossl.sh --register-account \
-m your-email@example.com \
--eab-kid YOUR_ACCESS_KEY_ID \
--eab-hmac-key YOUR_ACCESS_KEY_SECRET \
--server https://api.example.com

也可以直接运行交互向导:

autossl.sh

向导会提示选择“输入 accessKey”或“浏览器登录”。浏览器登录会在本机启动临时回调服务,默认监听 127.0.0.1:35887,授权完成后自动写入本地账号文件。

查看产品

签发前可先查看可用产品 ID 和购买周期:

autossl.sh --list-products

后续命令中的 --product 使用产品 ID,--period 使用购买周期。未指定时,客户端会进入交互选择。

签发域名证书

DNS 验证适合自动化签发,尤其是多域名和通配符证书。

autossl.sh --issue \
-d example.com \
-d www.example.com \
--dns dns_ali \
--product PRODUCT_CODE \
--period annually

常用参数:

参数说明
-d, --domain证书域名,可重复传入
--dnsDNS 插件名,例如 dns_alidns_cfdns_tencent
--product产品 ID,不传则交互选择
--period购买周期,不传则交互选择
-k, --keylength私钥规格:20484096ec-256ec-384
--notify-url签发完成后的业务回调地址
--dnssleepDNS 记录添加后等待传播的秒数,默认 20

首次使用某个 DNS 插件时,脚本会提示输入该 DNS 服务商的 API Key / Secret,并在验证成功后保存到 ~/.autossl/account.conf,下次无需重复输入。

签发 IP 证书或 HTTP 验证证书

IP 证书必须使用 HTTP 文件验证,并指定 -w--webroot。验证文件会写入站点根目录下的 .well-known/pki-validation/

autossl.sh --issue \
-d 203.0.113.5 \
-w /var/www/html \
--product PRODUCT_CODE \
--period annually

域名证书也可以用 HTTP 验证:

autossl.sh --issue \
-d www.example.com \
-w /var/www/html \
--product PRODUCT_CODE \
--period annually

如果一张证书包含多个域名且站点目录不同,可以重复指定 Webroot:

autossl.sh --issue \
-d example.com \
-d www.example.com \
-w example.com:/var/www/example \
-w www.example.com:/var/www/www-example \
--product PRODUCT_CODE \
--period annually

签发后部署

签发时可以把证书直接部署到 Nginx、Apache、Tomcat 或自定义路径。部署参数会保存到本地订单目录,后续 --renew--reissue 和 Cron 自动补发会复用同一套部署方案。

Nginx 示例:

autossl.sh --issue \
-d www.example.com \
--dns dns_ali \
--product PRODUCT_CODE \
--period annually \
--deploy nginx \
--deploy-cert /etc/nginx/ssl/www.example.com.cer \
--deploy-key /etc/nginx/ssl/www.example.com.key \
--deploy-reloadcmd "nginx -s reload" \
--deploy-reload

Apache 示例:

autossl.sh --issue \
-d www.example.com \
--dns dns_ali \
--deploy apache \
--deploy-cert /etc/httpd/ssl/www.example.com.cer \
--deploy-key /etc/httpd/ssl/www.example.com.key \
--deploy-chain /etc/httpd/ssl/ca.cer \
--deploy-reloadcmd "systemctl reload httpd" \
--deploy-reload

只查看部署计划,不写文件、不重载服务:

autossl.sh --deploy nginx --cert-id CERT_ID --deploy-plan

单独对已签发证书执行部署:

autossl.sh --deploy nginx \
--cert-id CERT_ID \
--deploy-cert /etc/nginx/ssl/www.example.com.cer \
--deploy-key /etc/nginx/ssl/www.example.com.key \
--deploy-reloadcmd "nginx -s reload" \
--deploy-reload

查询、下载和验证

查询证书状态:

autossl.sh --status --cert-id CERT_ID

触发 DCV 验证:

autossl.sh --verify-dcv --cert-id CERT_ID

下载已签发证书:

autossl.sh --download --cert-id CERT_ID --output /etc/ssl/www.example.com

也可以分别指定输出文件:

autossl.sh --download \
--cert-id CERT_ID \
--cert-file /etc/nginx/ssl/www.example.com.cer \
--key-file /etc/nginx/ssl/www.example.com.key \
--ca-file /etc/nginx/ssl/ca.cer \
--fullchain-file /etc/nginx/ssl/fullchain.cer

列出本地订单:

autossl.sh --list

修改 DCV 方式

如果订单已创建,但需要把某个域名从 DNS 验证切换为 HTTP、HTTPS、CLM 或邮箱验证,可使用 --update-dcv

单个域名:

autossl.sh --update-dcv \
--cert-id CERT_ID \
--dcv-domain www.example.com \
--dcv-type http

批量指定:

autossl.sh --update-dcv \
--cert-id CERT_ID \
--domain-dcv "example.com=dns,www.example.com=http"

修改后可继续触发验证:

autossl.sh --verify-dcv --cert-id CERT_ID

断点恢复

签发过程如果因为网络、余额、DNS 传播或终端中断失败,修复问题后使用 --resume 继续。恢复模式会跳过已完成的下单步骤,继续处理验证、轮询和下载。

autossl.sh --issue --resume \
--cert-id CERT_ID \
--dns dns_ali

重签和续费也支持恢复:

autossl.sh --reissue --resume --cert-id CERT_ID --dns dns_ali
autossl.sh --renew --resume --cert-id CERT_ID --dns dns_ali

重签证书

重签用于替换 CSR、重新生成私钥、修正订单信息或按 CA 要求补发证书。

autossl.sh --reissue \
--cert-id CERT_ID \
--dns dns_ali

需要更换密钥规格或域名时,可以显式覆盖:

autossl.sh --reissue \
--cert-id CERT_ID \
-d example.com \
-d www.example.com \
--dns dns_ali \
-k ec-256

续费证书

续费可指定订单,也可不传 --cert-id 进入交互选择。

autossl.sh --renew --cert-id CERT_ID --dns dns_ali
autossl.sh --renew

续费成功后,客户端会备份旧订单目录,并在原目录名上创建软链指向新订单目录。这样 Nginx、Apache 等外部服务如果引用的是原证书路径,通常无需修改配置。

自动续签补发

安装 Cron 后,AutoSSL.sh 会每天检查本地订单。达到续签阈值或服务端标记需要补发时,会自动续费/重签、下载证书,并执行首次签发时保存的部署和重载命令。

安装每日任务:

autossl.sh --install-cronjob

手动执行一次检查:

autossl.sh --cron --renew-days 14

查看日志:

tail -f ~/.autossl/cron.log

卸载任务:

autossl.sh --uninstall-cronjob

建议首次签发时就写完整部署参数,否则 Cron 只能完成证书补发和下载,无法自动覆盖线上服务证书或重载服务。

吊销证书

旧证书不再使用时可以吊销。吊销后证书立即失效,请先确认业务已经切换到新证书。

autossl.sh --revoke --cert-id CERT_ID

可指定吊销原因:

autossl.sh --revoke --cert-id CERT_ID --revoke-reason 4

--revoke-reason 支持 01345 或原因名;不指定时会交互选择。符合退款规则的订单会按平台规则退款,否则仅执行吊销。

常用选项速查

选项说明
--server URLAPI 基础地址,默认 https://api.trustserver.cn
--eab-kid KIDAccessKeyId
--eab-hmac-key SECRETAccessKeySecret
-m, --accountemail EMAIL联系邮箱
-d, --domain DOMAIN添加域名,可重复
--dns DNS_PLUGINDNS 插件名
-w, --webroot DIRHTTP DCV 验证目录
--product PRODUCT_ID产品 ID
--period PERIOD购买周期
--cert-id ID证书订单 ID
--resume恢复未完成流程
-k, --keylength BITS20484096ec-256ec-384
--output DIR证书输出目录
--cert-file PATH证书文件输出路径
--key-file PATH私钥文件输出路径
--ca-file PATHCA 链输出路径
--fullchain-file PATH全链输出路径
--deploy TYPEnginxapachetomcatotherskip 或部署模块名
--deploy-reload部署后立即重载服务
--deploy-plan只展示部署计划
--renew-days DAYS到期前多少天自动续签,默认 14
--debug输出调试信息
--verbose输出详细日志

排查建议

  • DNS 验证失败:执行 dig TXT _acme-challenge.example.com @8.8.8.8 检查 TXT 记录是否已传播。
  • HTTP 验证失败:确认公网能访问 http://example.com/.well-known/pki-validation/ 下的验证文件。
  • API 认证失败:检查 API Key 是否启用、服务器公网 IP 是否在白名单内、--server 是否指向正确 API 地址。
  • 余额不足:先在控制台充值,再执行 --resume 或重新签发。
  • 部署未生效:先执行 --deploy-plan 检查目标路径和重载命令,再确认运行用户有写入证书文件和重载服务的权限。