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/
│ └── example.com-CERT_ID/
│ ├── order.conf
│ ├── example.com.key
│ ├── example.com.csr
│ ├── example.com.cer
│ ├── ca.cer
│ └── fullchain.cer
├── certs-backup/
├── cron.log
├── cron-last-run.json
└── logs/
权限建议:
~/.autossl/:700account.conf:600- 私钥文件:
600
如果通过软链调用,脚本会自动定位真实目录,并加载同目录下的 dnsapi/、deploy/、email/。
绑定 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,授权完成后自动写入本地账号文件。
相关变量:
| 变量 | 说明 |
|---|---|
AUTOSSL_BROWSER_BIND_DISABLE=1 | 禁用浏览器登录 |
AUTOSSL_BROWSER_BIND_HOST | 回调监听地址 |
AUTOSSL_BROWSER_BIND_PORT | 回调监听端口 |
AUTOSSL_BROWSER_AUTH_ORIGIN | 授权页地址 |
查看产品
签发前可先查看可用产品 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,下次无需重复输入。
签发流程:
- 生成私钥和 CSR。
- 调用平台接口创建订单。
- 获取 DCV 信息。
- 调用 DNS 插件添加 TXT 记录。
- 等待 DNS 传播。
- 触发 DCV 验证。
- 轮询签发状态。
- 下载证书。
- 清理 TXT 记录。
- 执行输出、部署、 重载。
签发 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
自动扫描 Webroot:
autossl.sh --issue -d example.com -w auto
HTTPS DCV 独立目录:
autossl.sh --issue \
-d example.com \
-w /var/www/http \
--webroot-https /var/www/https \
--product PRODUCT_CODE \
--period annually
HTTP 验证流程:
- 下单时设置
httpDCV。 - 获取验证文件路径和内容。
- 写入 Webroot。
- 用
curl检查公网访问。 - 触发 DCV 验证。
- 签发后删除验证文件。
邮件 DCV 自动验证
邮件 DCV 默认开启,主要用于通配符域名。
逻辑:
*.example.com取基域名example.com。- 检查 MX/A 是否指向本机公网 IPv4。
- 使 用
admin@example.com。 - 优先配置 Postfix 收信。
- 失败则启动 Python SMTP 监听器。
- 提取 CA 邮件中的链接或验证码。
- 自动提交验证。
支持 CA:
- Sectigo / Comodo
- GlobalSign / AlphaSSL
- SSL.com
关闭邮件 DCV:
autossl.sh --issue -d '*.example.com' --dns dns_ali --no-email-dcv
或:
export AUTOSSL_EMAIL_DCV_AUTO=0
注意:
- CA 固定投递到 25 端口。
--email-dcv-port已废弃。- 25 端口不可达时,会回退到其它验证方式。
输出证书文件
默认输出到本地订单目录:
~/.autossl/certs/PRIMARY_DOMAIN-CERT_ID/
复制到目录:
autossl.sh --issue \
-d example.com \
--dns dns_cf \
--output /etc/ssl/example.com
复制到指定文件:
autossl.sh --issue \
-d example.com \
--dns dns_cf \
--cert-file /etc/ssl/example.com/cert.pem \
--key-file /etc/ssl/example.com/key.pem \
--ca-file /etc/ssl/example.com/ca.pem \
--fullchain-file /etc/ssl/example.com/fullchain.pem
签发后执行命令:
autossl.sh --issue \
-d example.com \
--dns dns_cf \
--reloadcmd "systemctl reload nginx"
打印 PEM:
autossl.sh --issue -d example.com --dns dns_cf --print-cert
autossl.sh --issue -d example.com --dns dns_cf --print-key
签发后部署
签发时可以把证书直接部署到 Nginx、Apache、Tomcat 或自定义路径。部署参数会保存到本地订单目录,后续 --renew、--reissue 和 Cron 自动补发会复用同一套部署方案。
通用参数:
| 参数 | 说明 |
|---|---|
--deploy TYPE | nginx、apache、tomcat、other、skip 或模块名 |
--deploy-cert PATH | 目标证书路径 |
--deploy-key PATH | 目标私钥路径 |
--deploy-chain PATH | 目标 CA 链路径 |
--deploy-reloadcmd CMD | 部署后重载命令 |
--deploy-reload | 立即重载 |
--no-deploy-reload | 只写文件,不重载 |
--deploy-plan | 只展示计划 |
--deploy-dry-run | 只模拟流程 |
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
Nginx 部署会复制 fullchain.cer 和私钥,执行 nginx -t,失败时回滚配置备份。
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
未指定 --deploy-chain 时,Apache 的 --deploy-cert 默认写入 fullchain.cer。
Tomcat 示例:
autossl.sh --deploy tomcat \
--cert-id CERT_ID \
--deploy-jks /opt/tomcat/conf/autossl.jks \
--deploy-jks-pass changeit \
--deploy-key-alias autossl \
--deploy-reloadcmd "systemctl restart tomcat" \
--deploy-reload
Tomcat 依赖 keytool,会生成 PKCS12 后转换为 JKS。默认密码 changeit,默认 alias autossl。
自定义路径:
autossl.sh --deploy other \
--cert-id CERT_ID \
--deploy-cert /opt/app/cert.pem \
--deploy-key /opt/app/key.pem \
--deploy-chain /opt/app/fullchain.pem \
--deploy-reloadcmd "systemctl reload app" \
--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
自定义部署模块
部署模块文件:
deploy/MODULE.sh
调用:
autossl.sh --deploy ssh --cert-id CERT_ID
脚本会传入:
DEPLOY_CERT_PATH
DEPLOY_KEY_PATH
DEPLOY_CHAIN_PATH
DEPLOY_DOMAIN
DEPLOY_TARGET_CERT_PATH
DEPLOY_TARGET_KEY_PATH
DEPLOY_TARGET_CHAIN_PATH
DEPLOY_RELOADCMD
DEPLOY_DO_RELOAD
内置模块:
| 模块 | 用途 | 必要配置 |
|---|---|---|
aliyun_cdn | 阿里云 CDN | DEPLOY_ALIYUN_CDN_AK、DEPLOY_ALIYUN_CDN_SK |
aliyun_esa | 阿里云 ESA | DEPLOY_ALIYUN_ESA_AK、DEPLOY_ALIYUN_ESA_SK、DEPLOY_ALIYUN_ESA_SITE_ID |
aliyun_waf | 阿里云 WAF | DEPLOY_ALIYUN_WAF_AK、DEPLOY_ALIYUN_WAF_SK、DEPLOY_ALIYUN_WAF_INSTANCE |
qiniu_cdn | 七牛云 CDN | DEPLOY_QINIU_AK、DEPLOY_QINIU_SK |
ssh | SSH 远程主机 | DEPLOY_SSH_HOST、DEPLOY_SSH_CERT_PATH、DEPLOY_SSH_KEY_PATH |
synology | 群晖 NAS | DEPLOY_SYNO_HOST、DEPLOY_SYNO_USERNAME、DEPLOY_SYNO_PASSWORD |
tencent_cdn | 腾讯云 CDN | DEPLOY_TENCENT_CDN_ID、DEPLOY_TENCENT_CDN_KEY |
tencent_edgeone | 腾讯云 EdgeOne | DEPLOY_TENCENT_TEO_ID、DEPLOY_TENCENT_TEO_KEY、DEPLOY_TENCENT_TEO_ZONE |
配置可写入 ~/.autossl/account.conf:
DEPLOY_SSH_HOST='1.2.3.4'
DEPLOY_SSH_USER='root'
DEPLOY_SSH_KEY='/root/.ssh/id_rsa'
DEPLOY_SSH_CERT_PATH='/etc/nginx/ssl/cert.pem'
DEPLOY_SSH_KEY_PATH='/etc/nginx/ssl/key.pem'
DEPLOY_SSH_CHAIN_PATH='/etc/nginx/ssl/fullchain.pem'
DEPLOY_SSH_RELOADCMD='systemctl reload nginx'
DNS 插件
插件目录:
dnsapi/
文件名:
dns_xxx.sh
命令中使用文件基名:
autossl.sh --issue -d example.com --dns dns_ali
autossl.sh --issue -d example.com --dns dns_cf
autossl.sh --issue -d example.com --dns dns_tencent
常见凭据:
| 插件 | 凭 据 |
|---|---|
dns_ali | Ali_Key、Ali_Secret |
dns_cf | CF_Token 或 CF_Key + CF_Email |
dns_tencent | Tencent_SecretId、Tencent_SecretKey |
dns_dp | DP_Id、DP_Key |
dns_aws | AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY |
dns_gd | GD_Key、GD_Secret |
dns_namesilo | Namesilo_Key |
dns_vultr | VULTR_API_KEY |
dns_gcloud | CLOUDSDK_ACTIVE_CONFIG_NAME |
凭据读取顺序:
- 环境变量。
~/.autossl/account.conf。- 交互输入。
DNS 添加成功后才会保存交互输入的凭据。
自定义插件必须实现:
dns_xxx_add() {
local fullname="$1"
local type="$2"
local value="$3"
}
dns_xxx_rm() {
local fullname="$1"
local type="$2"
local value="$3"
}
约定:成功返回 0。
查询、下载和验证
查询证书状态:
autossl.sh --status --cert-id CERT_ID
触发 DCV 验证:
autossl.sh --verify-dcv --cert-id CERT_ID