在 cPanel 中使用 Auto SSL
请勿混淆两个相似的名称。cPanel 中的 AutoSSL 是内置功能,从 Let's Encrypt 或 cPanel (Sectigo) 提供商签发免费证书;无法在其中添加带 EAB 密钥的自定义 ACME 服务器。ONEHOST 的 Auto SSL 是按域名订阅的服务,由您自己的 ACME 客户端签发 Sectigo 证书。在 cPanel 服务器上,该客户端就是 acme.sh,它会通过 cPanel API 自行将证书安装到账户中。
在哪里获取密钥
- 在个人中心 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。
需要准备
- cPanel 账户的 shell 访问权限(SSH 或 cPanel 中的"Terminal"),或 WHM 服务器的 root 权限。
- 域名已添加到 cPanel 账户并指向服务器;80 端口开放。
- 如果该域名启用了 AutoSSL,请为此域名禁用它(cPanel →"SSL/TLS Status"→"Exclude from AutoSSL"),否则 cPanel 可能会用自己的证书替换 Sectigo 证书。
在用户账户中安装 acme.sh
最好以 cPanel 用户本人身份安装 acme.sh——这样部署钩子无需额外权限即可安装证书:
curl https://get.acme.sh | sh -s [email protected]
source ~/.bashrc
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 --set-default-ca --server https://acme.sectigo.com/v2/DV
注册只需一次;带密钥的账户保存在 ~/.acme.sh/。
通过 cpanel_uapi 签发和安装
通过 webroot 签发——网站目录(主域名为 ~/public_html,附加域名为 ~/public_html/子域名 或"Domains"中的路径):
acme.sh --issue -d example.kz -d www.example.kz -w ~/public_html
使用 acme.sh 自带的 cPanel 部署钩子安装到账户:
acme.sh --deploy -d example.kz --deploy-hook cpanel_uapi
该钩子调用 uapi SSL install_ssl 并被记住:每次自动续期后证书会自动重新安装。acme.sh 文档中的限制:续期时钩子只为签发命令中的第一个域名安装证书,因此请为每个域名(连同其 www)单独签发证书。如果 acme.sh 以 root 身份运行,请在 --deploy 前指定用户:export DEPLOY_CPANEL_USER=cpuser。
不使用钩子的手动方式——cPanel →"SSL/TLS"→"Manage SSL sites":选择域名,将 ~/.acme.sh/example.kz_ecc/example.kz.cer 粘贴到"Certificate (CRT)",example.kz.key 粘贴到"Private Key (KEY)",ca.cer 粘贴到"Certificate Authority Bundle (CABUNDLE)",然后点击"Install Certificate"。或在控制台执行同样的操作:
uapi --user=cpuser SSL install_ssl domain=example.kz \
cert="$(cat ~/.acme.sh/example.kz_ecc/example.kz.cer)" \
key="$(cat ~/.acme.sh/example.kz_ecc/example.kz.key)" \
cabundle="$(cat ~/.acme.sh/example.kz_ecc/ca.cer)"
常见错误
- 域名验证失败——
www或域名本身指向了其他服务器;用dig +short www.example.kz检查。对于位于代理(Cloudflare)之后的域名,请使用--dns。 - CA 拒绝订单——域名不在 Auto SSL 订阅中;请在个人中心添加("Add domain")。
- 证书"回退"为 cPanel/Let's Encrypt——域名未从 AutoSSL 中排除。
- 没有 shell 权限——请在 WHM 中申请启用("Manage Shell Access"),或联系 ONEHOST 技术支持,我们为您配置。
检查与续期
cPanel →"SSL/TLS Status":域名应显示日期较新的 Sectigo 证书。在控制台:
echo | openssl s_client -connect example.kz:443 -servername example.kz 2>/dev/null \
| openssl x509 -noout -issuer -dates
acme.sh --list
crontab -l | grep acme.sh
acme.sh 的 cron 任务在到期前约 30 天续期证书并运行部署钩子。完整测试流程:acme.sh --renew -d example.kz --force,再运行 openssl——notAfter 日期应有变化。Auto SSL 订阅每年通过账单续费一次;账单提前 14 天开出。ONEHOST 技术支持全天候提供帮助。