在申请SSL证书中acme.sh  的  DNS  API  模式是其最强大的进阶功能,特别适合需要申请通配符证书或无法通过  HTTP  验证的复杂网络环境。它的核心原理是利用  DNS  服务商的  API  接口,自动化地添加和删除用于验证的  TXT  记录,从而实现从申请到续期的全流程无人干预。

下面我会为你梳理出从配置到优化的完整指南。

  核心机制与优势

DNS  API  验证的工作流程非常简洁高效:

1.    你在环境中配置好  DNS  服务商的  API  凭证。

2.    `acme.sh`  在申请证书时,通过  API  自动为你的域名添加一个特定的  TXT  记录。

3.    等待记录全球生效(可通过参数控制等待时间)后,Let's  Encrypt  等证书颁发机构(CA)通过查询该  TXT  记录来验证你对域名的所有权。

4.    验证通过,证书成功签发。

5.    `acme.sh`  再次通过  API  自动清理(删除)这条临时的  TXT  记录,保持  DNS  区域整洁。

主流  DNS  服务商配置示例

`acme.sh`  支持超过100家DNS服务商。配置方式大同小异,核心就是通过环境变量设置  API  凭证,然后用  `--dns`  参数指定提供商。下面以几个最常用的服务商为例进行说明:

服务商    插件名称    必需的环境变量    示例命令

Cloudflare      `dns_cf`  |  `CF_Token`  (API令牌)<br>`CF_Zone_ID`  (域名Zone  ID)    |  `export  CF_Token="你的令牌"`  <br>  `export  CF_Zone_ID="你的Zone  ID"`  <br>  `acme.sh  --issue  --dns  dns_cf  -d  example.com  -d  "*.example.com"`  

DNSPod  /  腾讯云      `dns_tencent`      `Tencent_SecretId`<br>`Tencent_SecretKey`      `export  Tencent_SecretId="你的SecretId"`  <br>  `export  Tencent_SecretKey="你的SecretKey"`  <br>  `acme.sh  --issue  --dns  dns_tencent  -d  example.com  -d  "*.example.com"`  

Aliyun  /  阿里云      `dns_ali`  |  `Ali_Key`<br>`Ali_Secret`        `export  Ali_Key="你的Key"`  <br>  `export  Ali_Secret="你的Secret"`  <br>  `acme.sh  --issue  --dns  dns_ali  -d  example.com  -d  "*.example.com"`  

GoDaddy      `dns_gd`    `GD_Key`<br>`GD_Secret`        `export  GD_Key="你的Key"`  <br>  `export  GD_Secret="你的Secret"`  <br>  `acme.sh  --issue  --dns  dns_gd  -d  example.com  -d  "*.example.com"`  

Amazon  Route53    `dns_aws`      `AWS_ACCESS_KEY_ID`<br>`AWS_SECRET_ACCESS_KEY`      `export  AWS_ACCESS_KEY_ID="你的KeyId"`  <br>  `export  AWS_SECRET_ACCESS_KEY="你的SecretKey"`  <br>  `acme.sh  --issue  --dns  dns_aws  -d  example.com  -d  "*.example.com"`  

>  请注意:首次成功签发后,你设置的这些  API  凭证会被  `acme.sh`  自动保存到  `~/.acme.sh/account.conf`  文件中,以便后续自动续期时使用。

进阶技巧与优化

掌握基础配置后,你可以通过以下技巧进一步优化使用体验:

1.    优化等待时间,提升签发速度:`--dnssleep`  参数用于控制  `acme.sh`  在添加  TXT  记录后等待的时间(秒),以便  DNS  记录在全球生效。默认值通常比较保守。如果你使用的  DNS  服务商解析速度很快(例如  Cloudflare、Route53),可以适当将这个值调低,如  `--dnssleep  30`,从而将证书签发时间从几分钟缩短至几十秒。

        bash

        acme.sh  --issue  --dns  dns_cf  --dnssleep  30  -d  example.com  -d  "*.example.com"

2.    精细调优,适应不同环境:除了  `--dnssleep`,你还可以通过环境变量调整重试机制来适应不同的网络环境或应对临时的API波动。

        bash

        #  在高速稳定网络环境中,适当降低重试次数

        export  MAX_REQUEST_RETRY_TIMES=10

        export  MAX_API_RETRY_TIMES=5

        acme.sh  --issue  --dns  dns_cf  -d  example.com  -d  "*.example.com"

3.    调试模式,精准定位问题:如果遇到问题,可以为命令添加  `--debug`  参数(如  `--debug  2`),这将输出详细的日志信息,帮助你分析是  API  凭证错误、网络问题还是  DNS  传播超时。

安全性实践

为了确保证书管理过程的安全,建议遵循以下最佳实践:

最小权限原则:在  DNS  服务商的管理后台,为  acme.sh  创建一个专用的  API  令牌(Token),并确保该令牌的权限仅限于  DNS  记录的管理,不要授予其删除整个域名或修改账户信息等高级权限。例如在腾讯云,可以创建一个只授权了  `dnspod:CreateRecord`  和  `dnspod:DeleteRecord`  等操作权限的子账号。

环境变量临时性:通过  `export`  命令设置的环境变量仅在当前终端会话中有效。这样可以避免凭证被永久记录在命令历史中。

配置文件安全:`acme.sh`  虽然会将凭证存储在  `~/.acme.sh/account.conf`,但会妥善处理其文件权限。你无需额外操作,但不应手动编辑或泄露此文件。

你目前使用的是哪家  DNS  服务商?如果有具体的配置需求或遇到问题,可以告诉我,我为你们提供更针对性的指导。