IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    使用 acme.sh 为在腾讯云(DNSPod)解析的域名自动申请证书(API3.0 / 腾讯云(DNSPod)API 密钥版本)

    小泽发表于 2023-09-14 11:12:50
    love 0

    ACME(自动证书管理环境)是一个互联网工程任务组维护的协议,它允许自动化 Web 服务器证书的部署,acme.sh 是支持 ACME 协议流行的客户端之一,可以通过其实现 SSL 证书的自动申请、续期等等。一直以来,使用 acme.sh 为域名申请证书都是通过 DNSPod API 来实现的,但由于 DNSPod API 后续将不再维护,同时旧版DNSPod API 将不再有服务承诺,以及旧版 API 存在着接口不稳定、权限无法细分控制、国内站和国际站接口不统一等问题,因此笔者基于 dns_dp 脚本,适配了腾讯云 API3.0 版本(dns_tencent)。升级后的脚本将同时支持 DNSPod 国内站和国际站(暂仅支持国内站,国际站部分接口官方团队正在排期适配,预计10月完成),不再需要针对国内站和国际站单独适配,同时支持使用子账号 API 密钥申请证书,权限可细分控制,接口更加稳定,使用更加方便、安全。

    2023-09-25 更新:腾讯云 API3.0 脚本已合并到 acme.sh master 分支,可直接升级 acme.sh 后使用或通过一键安装脚本,无需再手动下载dev分支脚本。

    安装 acme.sh

    全新安装

    适用于未安装 acme.sh 的用户,使用以下命令安装 acme.sh 客户端:

    安装 acme.sh

    1
    curl https://get.acme.sh | sh -s email=my@example.com

    or

    1
    wget -O -  https://get.acme.sh | sh -s email=my@example.com

    请将 my@example.com 替换为您的邮箱地址

    旧版升级

    适用于已安装 acme.sh 的用户,请运行以下命令升级 acme.sh 客户端:

    1
    acme.sh --upgrade

    获取腾讯云 SecretId 和 SecretKey

    方式一:使用主账号 API 密钥

    1. 登录 腾讯云控制台,进入 访问管理 页面,点击左侧菜单栏的访问密钥,进入 API 密钥管理页面。
      访问密钥

    2. 点击新建密钥,创建 API 密钥,并记录保存 SecretId 和 SecretKey。

    方式二:使用子账号 API 密钥

    步骤一:新建权限策略

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

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

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      {
      "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。
      创建用户
      SecretId 和 SecretKey

    申请证书

    1. 将获取到的 SecretId 和 SecretKey 导入环境变量中,以便 acme.sh 调用。
      1
      2
      export Tencent_SecretId="<Your SecretId>"
      export Tencent_SecretKey="<Your SecretKey>"
      例如:
      1
      2
      export Tencent_SecretId="AKIDxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
      export Tencent_SecretKey="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    2. 使用 acme.sh 申请证书,例如:
      1
      acme.sh --issue --dns dns_tencent -d example.com -d *.example.com
      例如:
      1
      acme.sh --issue --dns dns_tencent -d acme.dnstest.cc -d *.acme.dnstest.cc
      运行后,acme.sh 将自动为您的域名申请证书,并将证书文件保存在~/.acme.sh/example.com/目录下,并且会自动为您的域名配置证书自动续期任务,无需手动续期。
      运行结果如下:
      申请证书1
      申请证书2

    后续操作

    完成申请后请将证书配置到您的网站中,以 Nginx 为例,示例如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    server {
    listen 443 ssl http2;

    server_name example.com;

    # 请替换为证书实际路径
    ssl_certificate /root/.acme.sh/example.com/fullchain.cer;
    ssl_certificate_key /root/.acme.sh/example.com/example.com.key;

    ssl_session_timeout 5m;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    location / {
    root /nginx/www/html;
    }
    }

    完成后不要忘记重载服务哦~

    现在,请尽情享受 HTTPS 带来的安全吧!

    联系我们

    如果您在使用过程中遇到任何问题,欢迎报告Issue,或者通过以下方式联系我们:
    Issue:Report bugs to TencentCloud (DNSPod) DNS API
    官方用户群:您可在 DNSPod 任一官方用户群中联系小泽,点击加入 DNSPod 官方用户群。



沪ICP备19023445号-2号
友情链接