使用 acme.sh + 腾讯云 DNS 申请泛域名证书并部署到 Nginx
本文档说明如何在 Linux 服务器上使用 acme.sh,通过 腾讯云 DNS (DNSPod) 方式申请 泛域名 HTTPS 证书,并将证书安装到 /docker/nginx/cert 目录中,供 Docker 中的 Nginx 使用。
一、环境说明
-
操作系统:Linux(Ubuntu / CentOS 均可)
-
Web 服务:Nginx(Docker 容器)
-
证书工具:acme.sh
-
DNS 服务商:腾讯云 DNSPod
-
证书类型:Let’s Encrypt 泛域名证书(DV)
示例域名:
example.com
*.example.com
二、安装 acme.sh
1. 使用官方脚本安装(推荐)
curl https://get.acme.sh | sh -s email=my@example.com
安装完成后,acme.sh 默认位于:
~/.acme.sh/acme.sh
并且会自动在 ~/.bashrc 或 ~/.profile 中加入环境变量。
2. 重新加载环境变量
source ~/.bashrc
验证是否安装成功:
acme.sh --version
三、配置腾讯云 DNS API
acme.sh 通过 DNS 验证 来申请泛域名证书,需要使用腾讯云 API 密钥。
1. 获取腾讯云 API 密钥
进入腾讯云控制台:
-
访问:访问管理 → API 密钥管理 (建议新增用户并授权单独的DNS操作权限,更加安全,具体查看文章末尾)
-
创建并获取:
-
SecretId -
SecretKey
-
2. 设置环境变量
export Tencent_SecretId="你的SecretId"
export Tencent_SecretKey="你的SecretKey"
建议写入 ~/.bashrc,避免重启后失效:
vim ~/.bashrc
四、申请泛域名证书(DNS 验证)
1. 设置默认 CA 为 Let’s Encrypt
acme.sh --set-default-ca --server letsencrypt
2. 申请泛域名证书
acme.sh --issue \
--dns dns_tencent \
-d example.com \
-d '*.example.com'
说明:
-
--dns dns_tencent:使用腾讯云 DNS API -
-d example.com:主域名 -
-d '*.example.com':泛域名(必须)
⚠️ 注意:DNS 验证方式不占用 80 / 443 端口,适合已部署 Nginx 的服务器
五、安装证书到 Nginx 目录
2. 安装证书
acme.sh --install-cert -d annlcc.cn \
--cert-file /docker/nginx/cert/cert.pem \
--key-file /docker/nginx/cert/key.pem \
--fullchain-file /docker/nginx/cert/fullchain.pem \
--reloadcmd "docker restart nginx-web" #完成后的重新加载命令
说明:
-
example.com.key:私钥文件 -
example.com.pem:完整证书链 -
--reloadcmd:证书自动续期后重启 Nginx 容器
⚠️
nginx为容器名,请根据实际情况修改
六、Nginx(Docker)配置示例
server {
listen 443 ssl;
server_name example.com *.example.com;
ssl_certificate /etc/nginx/cert/example.com.pem;
ssl_certificate_key /etc/nginx/cert/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://backend;
}
}
七、自动续期说明
-
acme.sh 默认会创建 cron 定时任务
-
证书有效期 90 天
-
到期前会自动续期并执行
--reloadcmd
手动测试续期:
acme.sh --renew -d example.com --force
八、常见问题
1. DNS 验证失败
-
检查
SecretId / SecretKey是否正确 -
确认域名 DNS 在腾讯云 DNSPod
-
等待 DNS 生效(通常 1~2 分钟)
2. 找不到 acme.sh
~/.acme.sh/acme.sh --help
或建立软链接:
ln -s ~/.acme.sh/acme.sh /usr/local/bin/acme.sh
九、总结
-
acme.sh + DNS 验证是 泛域名证书的最佳方案
-
不依赖 80 / 443 端口
-
支持 Docker + Nginx 场景
-
自动续期,无需人工维护
如需 多域名 / 多容器 / 证书热更新 场景,可在此基础上扩展配置。
十、腾讯云创建子用户及策略
步骤一:新建权限策略
2.选择按策略语法创建-空白模板,填写基本信息,并将策略语法修改为以下内容,并点击完成创建。
{
"statement": [
{
"action": [
"dnspod:DescribeRecordFilterList",
"dnspod:DescribeRecordList",
"dnspod:CreateRecord",
"dnspod:DeleteRecord"
],
"effect": "allow",
"resource": [
"*"
]
}
],
"version": "2.0"
}

如您需要更精细的权限控制,可根据实际需求修改策略语法,如配置资源六段式等,详情请参考 CAM-DNS 解析 DNSPod。
步骤二:新建子账号并关联权限策略
更多推荐









所有评论(0)