Let's Encrypt DomainFactory

某些使用 cPanel 的共享主机套餐不提供AutoSSL 服务,或者仅在价格更高的套餐中提供。因此,您无法通过 cPanel 界面颁发免费的 Let's Encrypt 证书,所有域名都只能使用自签名证书。浏览器会将页面显示为“不安全”。解决方案:使用acme.sh自行获取证书,并通过 cPanel UAPI 安装。这样,证书将自动续期,无需使用 AutoSSL。


HTTPS 现已强制执行:绿色挂锁图标是标准配置,浏览器会对任何其他协议发出明显的警告。因此,如果您的主机套餐没有提供便捷的免费证书获取方式,那就更加令人沮丧了。不过,只需在 shell 中编写几行代码,即可优雅且永久地解决这个问题——完整过程如下所述。

1. 通过 SSH 登录

ssh -p <port> <cpanel-user>@<host>

2. 安装 acme.sh

curl https://get.acme.sh | sh -s email=du@example.com
source ~/.bashrc

3. 将 Let's Encrypt 设置为证书颁发机构 (CA)。

acme.sh --set-default-ca --server letsencrypt

4. 颁发证书

acme.sh --issue -d example.com -d www.example.com -w ~/public_html

5. 安装到 cPanel

acme.sh --deploy -d example.com --deploy-hook cpanel_uapi

6. 检查

uapi SSL installed_hosts
echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null \
     | openssl x509 -noout -issuer -dates

该钩子通过 UAPI 将证书写入相应的虚拟主机。部署设置已保存——从现在开始,cron 任务会在证书过期前自动续订并安装所有内容。颁发者应为“Let's Encrypt”,到期日期应设置为大约 90 天后。

有些主机商运行自己的 cPanel 钩子。 install_ssl 并回应如下: adminbin Cpanel/hooks2/...: exit 255. acme.sh 仍然报告“部署成功”——这通常是正确的。如有疑问,请使用 uapi SSL installed_hosts (步骤 6)验证 Let's Encrypt 证书是否已实际安装。

对于带有变音符号的域名,acme.sh 会将证书以 Punycode 格式存储在内部(xn--…),而钩子的自动匹配器会比较 Unicode 形式。结果:“已部署到 0 个站点中的 0 个”——未安装任何内容。解决方案:直接操作 Punycode 域并禁用自动匹配。:

# Punycode-Form der Domain vorher ermitteln (z. B. via idn-Tool oder Online-Konverter)
acme.sh --issue -d xn--<punycode> -d www.xn--<punycode> -w ~/public_html
export DEPLOY_CPANEL_AUTO_ENABLED='false'
acme.sh --deploy -d xn--<punycode> --deploy-hook cpanel_uapi

使用 SSH 访问时,您不需要 AutoSSL:acme.sh 会颁发证书。 cpanel_uapi该钩子程序会安装它,并且内置的定时任务会使其自动更新。设置完成后,免费的 HTTPS 服务即可持续运行。那些投入初始精力进行设置的用户,以后就无需再手动续费了——而且只需一条命令,即可将相同的解决方案扩展到同一帐户下的任何其他域名。

背部