本文档说明如何在 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 场景

  • 自动续期,无需人工维护

如需 多域名 / 多容器 / 证书热更新 场景,可在此基础上扩展配置。

十、腾讯云创建子用户及策略

步骤一:新建权限策略

  1. 登录 腾讯云控制台,进入 访问管理 页面,点击左侧菜单栏的策略,进入策略管理页面,并点击新建自定义策略

2.选择按策略语法创建-空白模板,填写基本信息,并将策略语法修改为以下内容,并点击完成创建。

{
    "statement": [
        {
            "action": [
                "dnspod:DescribeRecordFilterList",
                "dnspod:DescribeRecordList",
                "dnspod:CreateRecord",
                "dnspod:DeleteRecord"
            ],
            "effect": "allow",
            "resource": [
                "*"
            ]
        }
    ],
    "version": "2.0"
}

如您需要更精细的权限控制,可根据实际需求修改策略语法,如配置资源六段式等,详情请参考 CAM-DNS 解析 DNSPod

步骤二:新建子账号并关联权限策略

  1. 登录 腾讯云控制台,进入 访问管理 页面,点击左侧菜单栏的用户列表,进入用户列表页面,并点击新建用户
  2. 选择快速创建,填写用户信息,并选择编程访问。
  3. 配置用户权限,仅选择刚刚创建的权限策略,并点击确定保存。
  4. 点击创建用户,完成子账号创建,并记录保存 SecretId 和 SecretKey。
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐