很多朋友私信我:
“哥,我这边都是 Windows 服务器,怎么优雅搞 Let’s Encrypt 免费证书?还能自动续期那种。”
其实方案很多,大致分两类:
绕过 Windows,伪装成 Linux 环境:用 WSL2,在 WSL 里直接按 Linux 教程走(推荐,兼容性最好)用 Git for Windows / MSYS2 / Cygwin 这类类 Unix 环境用 Docker 跑一个 Linux 容器,在容器内用 acme.sh / certbot 等工具原生 Windows 方案:4. 用 win-acme (今天重点讲它)前面 1–3 都偏向「把 Windows 伪装成 Linux」来搞证书,如果你更熟悉 Linux,可以参考这篇: 免费拿到泛域名证书:从申请到自动续期完整教程
本文只讲:原生 Windows + DNSPod + win-acme,全自动申请和续期泛域名证书。用完你会发现,Windows 上玩证书一点不比 Linux 麻烦。
一、准备工具:下载 win-acmewin-acme 官网: win-acme
下载后,放到一个固定目录,比如:
D:\work\tools\win-acme然后解压。后面会用到里面的 wacs.exe 程序。
二、写两个 PowerShell 脚本:对接 DNSPod API目标是实现:
win-acme 校验域名时,调用脚本 ➜ 自动到 DNSPod 添加 TXT 记录验证完成后,再调用脚本 ➜ 自动删除 TXT 记录2.1 创建 DNS 记录脚本:dnspod_create.ps1在 D:\work\tools\Scripts\ 目录下(路径你可以自定义)新建:
dnspod_create.ps1
内容如下(记得把域名改成你自己的):
param( [string]$Identifier, # win-acme 会传入 _acme-challenge.example.com [string]$Token # win-acme 会传入要写入 TXT 的值)# 配置:DNS 主域名(改成你的域名)$Domain = "xxx.cn"# DNSPod Token 文件(内容格式:ID,Token)$TokenFile = "D:\work\tools\win-acme\Secrets\dnspod_token.txt"if (!(Test-Path $TokenFile)) { Write-Error "Token file not found: $TokenFile" exit 1}$LoginToken = (Get-Content $TokenFile -Raw).Trim()# 这里简单处理:统一用 _acme-challenge 作为子域$Sub = "_acme-challenge"Write-Host "创建 TXT 记录:主域: $Domain, 子域: $Sub, 内容: $Token, 验证域名: $Identifier"# 调 DNSPod HTTP API 创建 TXT 记录$api = "https://dnsapi.cn/Record.Create"$body = @{ login_token = $LoginToken format = "json" domain = $Domain sub_domain = $Sub record_type = "TXT" record_line = "默认" value = $Token ttl = 600}$res = Invoke-RestMethod -Uri $api -Method Post -Body $body -ContentType "application/x-www-form-urlencoded"if ($null -eq $res -or $res.status.code -ne "1") { Write-Error "Create record failed: $($res.status.message)" exit 1}$recordId = $res.record.id# 保存 recordId,按 Identifier 命名,方便删除$storeDir = "D:\work\tools\win-acme\dnspod_records"if (!(Test-Path $storeDir)) { New-Item -Path $storeDir -ItemType Directory | Out-Null}$storeFile = Join-Path $storeDir ([Uri]::EscapeDataString($Identifier) + ".txt")Set-Content -Path $storeFile -Value $recordId -Encoding utf8# 等待 DNS 生效(视自己 DNS 情况可调大/调小)Start-Sleep -Seconds 20Write-Output $recordId配置 DNSPod Token 文件登录 DNSPod:DNSPod-免费智能DNS解析服务商-电信_网通_教育网,智能DNS-烟台帝思普网络科技有限公司找到 API Token(控制台里能看到)按 ID,Token 的格式写入文件,例如:123456,abcdefghijklmn1234567890保存到:
D:\work\tools\win-acme\Secrets\dnspod_token.txt这个 Token 相当于账号密码,一定要妥善保管,不要泄露。
2.2 删除 DNS 记录脚本:dnspod_delete.ps1同目录下新建:
dnspod_delete.ps1
内容如下:
param( [string]$Identifier, [string]$UnusedToken # win-acme 会传入第二个参数,这里占位即可)$Domain = "xxx.cn" # 改成你自己的顶级域名$TokenFile = "D:\work\tools\win-acme\Secrets\dnspod_token.txt"if (!(Test-Path $TokenFile)) { Write-Error "Token file not found: $TokenFile" exit 1}$LoginToken = (Get-Content $TokenFile -Raw).Trim()$storeDir = "D:\work\tools\win-acme\dnspod_records"$storeFile = Join-Path $storeDir ([Uri]::EscapeDataString($Identifier) + ".txt")if (!(Test-Path $storeFile)) { Write-Output "No record file found for $Identifier, skipping delete." exit 0}$recordId = (Get-Content $storeFile -Raw).Trim()$api = "https://dnsapi.cn/Record.Remove"$body = @{ login_token = $LoginToken format = "json" domain = $Domain record_id = $recordId}$res = Invoke-RestMethod -Uri $api -Method Post -Body $body -ContentType "application/x-www-form-urlencoded"if ($null -eq $res -or $res.status.code -ne "1") { Write-Error "Delete record failed: $($res.status.message)" exit 1}Remove-Item $storeFile -ForceWrite-Output "Deleted $recordId"到这里,DNS 自动添加 / 删除 TXT 记录的能力就准备好了。
三、使用 win-acme 申请泛域名证书3.1 启动 win-acme双击 wacs.exe,会弹出一个控制台界面。
第一步选:
N ➜ Create certificate (default settings)3.2 选择手动输入域名选择:
Manual input然后按你的需求输入域名,规则如下:
只申请主域名:example.com主域名 + 泛域名(常用):example.com,*.example.com多个不同域名:example.com,example.org,*.example.org注意:
多个域名用英文逗号 , 分隔不要加引号泛域名必须是 *.example.com 这种格式示例输入(整行):
Host: example.com,*.example.com

3.3 验证方式选择:必须用 DNS-01
泛域名(*.xxx.cn)只能使用 DNS-01 验证(TXT 记录),HTTP-01(放文件的那种)不支持泛域名。
在 win-acme 的选项里,跟 DNS-01 有关的一般有:
6: [dns] Create verification records manually自己登录 DNS 控制台,手工添加 TXT,不能自动续期,不推荐长期用7: [dns] Create verification records with acme-dns需要自己额外部署 acme-dns,有一定成本8: [dns] Create verification records with your own script使用「自定义脚本」调用 DNSPod 等 API,支持自动续期这里我们选:8
3.4 配置 DNS 创建脚本(Create Script)提示:DnsCreateScript:
输入 PowerShell 路径:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe回车。
3.5 配置 DNS 删除脚本方式提示:How to delete records after validation:
选择:
1 ➜ 同样使用 PowerShell3.6 配置 DNS 创建脚本参数提示:DnsCreateScriptArguments:
输入(改成你的脚本路径):
-ExecutionPolicy Bypass -File "D:\work\tools\Scripts\dnspod_create.ps1" "{Identifier}" "{Token}"3.7 配置 DNS 删除脚本参数提示:DnsDeleteScriptArguments:
输入:
-ExecutionPolicy Bypass -File "D:\work\tools\Scripts\dnspod_delete.ps1" "{Identifier}" "{Token}"
3.8 并行执行策略提示:Enable parallel execution?
选项说明:
1: Run everything one by one含义:一次只处理一个验证动作(串行)。安全且简单,适合脚本读写共享文件(比如把 recordId 存到某个固定文件名)时使用。若你没有为并发做特殊处理,就选 1。2: Allow multiple instances of the script to run at the same time含义:允许同一脚本被多个进程同时运行(并发)。适合脚本是无状态或每个调用使用独立临时文件/参数,不会互相覆盖的情况。3: Allow multiple records to be validated at the same time含义:允许在同一时间为同一域名创建多个不同的 TXT 记录(有些 DNS 提供商或策略下可能会造成冲突)。通常不需要选此项,除非你知道需要同时为多个不同标识符并行验证。4: Allow both modes of parallelism含义:同时允许 2 和 3。很少需要。我们这里选:
13.9 证书保存方式提示:How would you like to store the certificate?
常用选项:
IIS Central Certificate Store (.pfx per host)适合大规模 IIS 环境,使用 Central Certificate StorePEM encoded files (Apache, nginx, etc.)导出 cert.pem / chain.pem / privkey.pem,最通用,很多程序都支持PFX archive导出 PFX 文件,方便导入 Windows 证书管理器或其它系统Windows Certificate Store (Local Computer)直接安装到本地计算机证书库,IIS 可直接使用(需要管理员权限运行)No (additional) store steps演示我选择:
2 ➜ 输出 PEM 文件,兼容性最好3.10 指定证书导出路径提示:File path:
比如填:
D:\work\tools\win-acmewin-acme 会在这里生成对应的证书文件夹和文件。
3.11 是否给私钥加密提示:Choose from the menu:
我这里选:
1 ➜ 不给证书加密(看你自己安全策略来定)
3.12 安装(部署)步骤选择提示:Which installation step should run first?
部分说明:
Create or update bindings in IIS自动把证书绑定到 IIS 网站(需要管理员权限)Start external script or program申请完证书后,调用你自己的脚本(比如复制证书、重启服务、上传到网关等等)No (additional) installation steps不做额外动作,只生成证书文件,后续你自己手动配置演示我选择:
3 ➜ No (additional) installation steps也就是:只让 win-acme 负责「申请 + 续期 + 导出证书」,部署到具体 web 服务由你自己控制。
最终执行成功如下:

再看看证书,生成在设置的D:\work\tools\win-acme下:
四、证书自动续期:加入计划任务就躺平了win-acme 会记录下你的证书配置,后续只要执行:
wacs.exe --renew --baseuri "https://acme-v02.api.letsencrypt.org/"就会自动检查、快到期就续期。
建议使用绝对路径,比如:
D:\work\tools\win-acme\wacs.exe --renew --baseuri "https://acme-v02.api.letsencrypt.org/"4.1 放入 Windows 计划任务打开「任务计划程序」创建基本任务:触发器:每天一次 / 每周几次都行(Let’s Encrypt 本身控制频率,安全)操作:启动程序程序/脚本:D:\work\tools\win-acme\wacs.exe参数:--renew --baseuri "https://acme-v02.api.letsencrypt.org/"选择「使用最高权限运行」(建议)从此之后,证书就会自动续期,真正做到忘掉它的存在。
转载请注明来自海坡下载,本文标题:《.run域名注册管理(免费拿泛域名证书Windows 全流程申请自动续期一步到位)》
京公网安备11000000000001号
京ICP备11000001号
还没有评论,来说两句吧...