在构建基于 OpenResty 的零信任安全网关(ZTA Portal)时,统一的身份认证(如企业微信鉴权、邮箱验证码登录)往往依赖安全的 HTTPS 访问。本文将详细记录如何利用 acme.sh 工具,结合 Cloudflare、阿里云、腾讯云 等主流 DNS 服务商的 API,自动化申请、续期并挂载通配符(Wildcard)ECC SSL 证书,并重点解决苹果设备(iOS/macOS)常见的 SSL 证书链兼容性问题,为后续网关建设打下坚实基础。
一、 环境准备与 acme.sh 安装
无论使用哪家 DNS 服务商,首先都需要在服务器上安装 acme.sh 客户端并设置默认的证书颁发机构(建议使用 Let’s Encrypt)。
Bash
# 1. 安装 acme.sh (请更换为你的常用邮箱)
curl https://get.acme.sh | sh -s [email protected]
# 2. 使环境变量生效
source ~/.bashrc
# 3. 设置默认的 CA 为 Let's Encrypt
acme.sh --set-default-ca --server letsencrypt
二、 配置 DNS API 密钥(多厂商支持)
为了支持通配符证书(如 *.3137666.xyz)的自动 DNS 验证,我们需要将对应域名服务商的 API 凭证注入环境变量中。acme.sh 原生支持绝大多数主流云厂商。
1. Cloudflare 域名配置
在 Cloudflare 后台生成具有 Zone DNS 编辑权限的 API Token:
Bash
export CF_Token="你的Cloudflare_API_Token"
2. 阿里云 (Aliyun) 域名配置
在阿里云控制台子账号中获取 AccessKey ID 和 AccessKey Secret:
Bash
export Ali_Key="你的阿里云AccessKey_ID"
export Ali_Secret="你的阿里云AccessKey_Secret"
3. 腾讯云 (DNSPod / Tencent Cloud) 域名配置
在腾讯云/DNSPod 控制台获取密钥:
Bash
# 腾讯云 DNSPod
export DP_Id="你的DNSPod_ID"
export DP_Key="你的DNSPod_Token"
三、 申请通配符 ECC 证书(含苹果设备兼容性优化)
配置好对应厂商的环境变量后,即可运行签发命令。acme.sh 会自动在你的 DNS 解析中添加一条临时 TXT 记录完成验证。
以 Cloudflare 为例(DNS 插件为 dns_cf):
Bash
acme.sh --issue --dns dns_cf -d 3137666.xyz -d *.3137666.xyz --ecc --preferred-chain "ISRG Root X1" --debug
参数与避坑说明:
--ecc:表示申请国密兼容的 ECC 证书,性能更好、握手更快。--preferred-chain "ISRG Root X1"(核心重点):针对苹果设备(iOS/macOS)及部分老旧客户端的 SSL 兼容性优化。如果不加这个参数,Let’s Encrypt 偶尔会下发包含旧交叉签名根证书的完整链,导致部分苹果设备访问时提示证书不可信。强制指定该参数可确保生成最干净、兼容性最完美的现代信任链。- 如果使用的是其他 DNS 厂商,只需把
--dns dns_cf换成对应的插件即可(如阿里云--dns dns_ali、腾讯云 DNSPod--dns dns_dp)。
四、 安装证书与 OpenResty 自动重载
证书申请成功后,不能直接去 /root/.acme.sh/ 目录下拿文件。我们需要使用 --install-cert 将其精确定向安装到 OpenResty 的挂载目录中,并配置自动重载命令。
执行以下安装命令(以 ECC 证书为例):
Bash
acme.sh --install-cert -d 3137666.xyz --ecc \
--key-file /DATA/compose/letsencrypt/ssl/3137666.xyz.key \
--fullchain-file /DATA/compose/letsencrypt/ssl/3137666.xyz.fullchain.cer \
--reloadcmd "docker exec openresty nginx -s reload"
参数说明:
--key-file:私钥导出的目标路径。--fullchain-file:包含完整证书链的公钥文件路径。--reloadcmd:证书自动续期后(acme.sh每 60 天会自动静默续期)触发的回调命令,这里让 Docker 容器内的 OpenResty 自动平滑重载,实现零中断更新。
五、 总结
通过上述步骤,我们不仅打通了 acme.sh 与各大主流 DNS 厂商的自动化链路,还通过 --preferred-chain "ISRG Root X1" 完美解决了苹果生态下的证书信任兼容性问题。生成的 .key 和 .fullchain.cer 文件已经稳妥地挂载到了 OpenResty 目录中。
接下来,我们就可以在此基础上,顺利编写 OpenResty 的 Lua 鉴权脚本、对接邮件 API 发送验证码登录NAS系统,以及实现企业微信认证后登录核心系统等,实现反向代理安全拦截验证。