AutoSSL.sh 自动化证书教程
AutoSSL.sh 是用于自动化管理 SSL 证书生命周期的命令行客户端,参数风格接近 acme.sh,但它对接的是平台 REST API,不是标准 ACME 协议。它适合在服务器、CI/CD 或运维脚本中完成证书签发、验证、下载、部署、续费、重签和吊销。
典型流程如下:
- 安装
autossl.sh和依赖。 - 绑定平台 API Key 到当前服务器。
- 使用 DNS 或 HTTP 验证签发证书。
- 保存部署参数,让后续续费和补发自动复用。
- 安装 Cron,定期检查即将到期或需要补发的证书。
准备工作
- Linux 或 macOS 服务器。
- 已安装
bash、curl、jq、openssl。 - 控制台账户余额充足。
- 已创建 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 | 证书域名,可重复传入 |
--dns | DNS 插件名,例如 dns_ali、dns_cf、dns_tencent |
--product | 产品 ID,不传则交互选择 |
--period | 购买周期,不传则交互选择 |
-k, --keylength | 私钥规格:2048、4096、ec-256、ec-384 |
--notify-url | 签发完成后的业务回调地址 |
--dnssleep | DNS 记录添加后等待传播的秒数,默认 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 支持 0、1、3、4、5 或原因名;不指定时会交互选择。符合退款规则的订单会按平台规则退款,否则仅执行吊销。
常用选项速查
| 选项 | 说明 |
|---|---|
--server URL | API 基础地址,默认 https://api.trustserver.cn |
--eab-kid KID | AccessKeyId |
--eab-hmac-key SECRET | AccessKeySecret |
-m, --accountemail EMAIL | 联系邮箱 |
-d, --domain DOMAIN | 添加域名,可重复 |
--dns DNS_PLUGIN | DNS 插件名 |
-w, --webroot DIR | HTTP DCV 验证目录 |
--product PRODUCT_ID | 产品 ID |
--period PERIOD | 购买周期 |
--cert-id ID | 证书订单 ID |
--resume | 恢复未完成流程 |
-k, --keylength BITS | 2048、4096、ec-256、ec-384 |
--output DIR | 证书输出目录 |
--cert-file PATH | 证书文件输出路径 |
--key-file PATH | 私钥文件输出路径 |
--ca-file PATH | CA 链输出路径 |
--fullchain-file PATH | 全链输出路径 |
--deploy TYPE | nginx、apache、tomcat、other、skip 或部署模块名 |
--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检查目标路径和重载命令,再确认运行用户有写入证书文件和重载服务的权限。