通过 acme.sh 使用 Auto SSL
acme.sh 是一个没有依赖的单文件 shell 脚本,可在任何 Linux、FreeBSD 和容器中运行。它完整支持带外部账户绑定(EAB)的 ACME,因此可直接用于 Auto SSL。ISPmanager、FastPanel、cPanel 和 BitrixVM 的文章也以本指南为基础。
在哪里获取密钥
- 在个人中心 1host.kz/bill 打开"Auto SSL (Sectigo ACME)"服务(可在 Auto SSL 页面下单)。
- 点击"Configure Now"(配置)并填写域名:普通域名填入"Single Domains"(
www与不带www视为同一域名),通配符填入"Wildcard Domains"。 - 5–30 秒后,服务卡片中会显示 ACME account ID、EAB MAC ID、EAB MAC key 和 Server URL。
下文中:Server URL 为 https://acme.sectigo.com/v2/DV(所有客户通用),YOUR_EAB_KID 为 EAB MAC ID,YOUR_EAB_HMAC_KEY 为 EAB MAC key。请像保管密码一样保管它们。
安装 acme.sh
以 root 身份(或有权访问网站目录并重载 Web 服务器的用户):
curl https://get.acme.sh | sh -s [email protected]
source ~/.bashrc
acme.sh --version
安装程序会将脚本放入 ~/.acme.sh/,并添加一个每天检查有效期并续期证书的 cron 任务。检查:crontab -l | grep acme.sh。
使用 EAB 密钥注册账户
acme.sh --register-account --server https://acme.sectigo.com/v2/DV \
--eab-kid YOUR_EAB_KID --eab-hmac-key YOUR_EAB_HMAC_KEY
此操作只需一次:acme.sh 将账户保存在 ~/.acme.sh/ca/acme.sectigo.com/,之后无需再提供密钥。为避免在每条命令中输入 --server,可将 Sectigo 设为默认 CA:
acme.sh --set-default-ca --server https://acme.sectigo.com/v2/DV
签发证书
通过 webroot——Web 服务器提供 /.well-known/acme-challenge/ 的网站目录:
acme.sh --issue --server https://acme.sectigo.com/v2/DV \
-d example.kz -d www.example.kz -w /var/www/html
其他验证方式,用于替代 -w /var/www/html:
--nginx——验证期间 acme.sh 自动临时修改 nginx 配置;--apache——Apache 同理;--standalone——在 80 端口启动自带服务器(期间需停止 Web 服务器)。
一条命令中的所有域名都必须在订阅中并指向该服务器。80 端口必须开放。
安装证书并重载 Web 服务器
不要直接引用 ~/.acme.sh/ 中的文件——其结构可能变化。请将证书复制到固定路径并指定重载命令;acme.sh 会记住它们,并在每次续期后重复执行:
mkdir -p /etc/ssl/example.kz
acme.sh --install-cert -d example.kz \
--key-file /etc/ssl/example.kz/privkey.pem \
--fullchain-file /etc/ssl/example.kz/fullchain.pem \
--reloadcmd "systemctl reload nginx"
Web 服务器配置:
# nginx
ssl_certificate /etc/ssl/example.kz/fullchain.pem;
ssl_certificate_key /etc/ssl/example.kz/privkey.pem;
# Apache(reloadcmd 为 "systemctl reload apache2" 或 "httpd")
SSLCertificateFile /etc/ssl/example.kz/fullchain.pem
SSLCertificateKeyFile /etc/ssl/example.kz/privkey.pem
通过 DNS 获取通配符证书
对于 *.example.kz,CA 通过 TXT 记录验证域名(dns-01),因此 acme.sh 需要访问 DNS 服务商的 API。以 Cloudflare 为例(acme.sh 支持 150 多家服务商,列表见其 wiki 的 dnsapi 页面):
export CF_Token="具有区域编辑权限的令牌"
export CF_Account_ID="账户ID"
acme.sh --issue --server https://acme.sectigo.com/v2/DV --dns dns_cf \
-d example.kz -d '*.example.kz'
凭据保存在 ~/.acme.sh/account.conf 中,续期无需您参与。如果域名的 DNS 托管在我们的 ns1/ns2.1host.kz,请联系技术支持——我们协助配置 DNS 验证。不建议在 Auto SSL 中使用手动模式(--dns 不带服务商,手动添加 TXT 记录):每次续期都需要重新修改记录。
检查与续期
查看证书列表及下次续期日期:
acme.sh --list
确认网站使用的是 Sectigo 证书:
echo | openssl s_client -connect example.kz:443 -servername example.kz 2>/dev/null \
| openssl x509 -noout -issuer -dates
issuer 中应包含 O = Sectigo Limited。续期由每日 cron 任务完成:证书在到期前约 30 天更新,然后执行 --reloadcmd。强制续期并测试整个流程:
acme.sh --renew -d example.kz --force
日志位于 ~/.acme.sh/acme.sh.log。只要订阅有效(续费账单在年度到期前 14 天送达),无需其他操作。如有问题,请通过个人中心联系 ONEHOST 技术支持,我们全天候回复。