帮助

在 cPanel 中使用 Auto SSL

请勿混淆两个相似的名称。cPanel 中的 AutoSSL 是内置功能,从 Let's Encrypt 或 cPanel (Sectigo) 提供商签发免费证书;无法在其中添加带 EAB 密钥的自定义 ACME 服务器。ONEHOST 的 Auto SSL 是按域名订阅的服务,由您自己的 ACME 客户端签发 Sectigo 证书。在 cPanel 服务器上,该客户端就是 acme.sh,它会通过 cPanel API 自行将证书安装到账户中。

在哪里获取密钥

  1. 在个人中心 1host.kz/bill 打开"Auto SSL (Sectigo ACME)"服务(可在 Auto SSL 页面下单)。
  2. 点击"Configure Now"(配置),在"Single Domains"中填写域名(www 与不带 www 视为同一域名),通配符填入"Wildcard Domains"。
  3. 5–30 秒后显示 ACME account IDEAB MAC IDEAB MAC keyServer URL

命令中:Server URL 为 https://acme.sectigo.com/v2/DVYOUR_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 技术支持全天候提供帮助。

如有任何疑问,请联系我们