
简介win-acme.v2.1.18-x64 是一款面向 Windows 平台网站运维者与个人站长的免费 SSL 证书申请与管理工具基于 ACME 协议对接 Lets Encrypt可自动完成域名所有权验证、证书签发、IIS 等服务器安装及到期续订帮助预算有限的小型项目低成本实现 HTTPS 加密访问。资源包共 27 个文件约 29.58MB以 15 个 ps1 脚本和 2 个 bat 批处理承担自动化流程辅以 4 个 dll 运行库、2 个 json 配置、1 个 exe 主程序及 dat、xml、txt 等说明与配置文件结构完整、开箱可用。目前已有 336 人学习下载。借助其中的脚本与配置样例读者可快速理解证书申请、通配符多域名管理与自动续期的工作机制并参考日志与命令行用法排查验证失败、速率限制等常见问题适合希望掌握免费证书自动化运维技能的初、中级用户。1. 从一台 IIS 服务器的证书续期说起win-acme v2.1.18 到底装的是什么上周帮一个朋友收拾他公司那台 Windows ServerIIS 上挂的三个站点证书全过期了浏览器一片红。他之前是手动去申请、手动导入、手动绑 IIS一年折腾一次每次都要翻半天旧笔记。我给他上的方案就是 win-acme v2.1.18-x64——一个在 Windows 上把 ACME 证书申请、验证、安装、续期全流程串起来的命令行工具。它本身不签发证书签发方是 ACME 协议背后的 CAwin-acme 负责的是“把该做的事按计划做完”。装不好会怎样最典型的是验证方式选错导致申请卡在 pending、私钥权限没给对导致 IIS 绑不上、计划任务没建导致三个月后又过期。这篇笔记按“环境先列清、再一步步装、最后能验证跑通”的顺序写适合手上管着 Windows 站点、又不想每年手动续期的开发者照着走。2. 装前把环境列清版本、权限与验证方式三件事2.1 版本选择为什么锁定 v2.1.18-x64 而不是随手下最新win-acme 的发布包按架构分 x86 和 x64按形态分便携版zip和安装版msi。我一般给生产环境选 x64 便携版理由很实际解压即用升级时整个目录替换回滚就是把旧目录拷回来不留注册表残渣。v2.1.18 这个版本号要记牢因为不同小版本之间命令行参数有过调整网上搜到的老教程里--accepttos之类的写法在新版可能已经变了照抄容易翻车。选版本时看三个点目标机器的 Windows 版本、是否装了 .NET Framework 4.7.2 以上、IIS 是否在同一台机器上。win-acme 依赖 .NET FrameworkServer 2016 及以上一般自带够用的版本Server 2012 R2 要确认补丁。x64 包只能跑在 64 位系统上别在 32 位老机器上试。项目要求说明操作系统Windows Server 2012 R2 及以上 / Windows 10 及以上64 位运行时.NET Framework 4.7.2低于此版本先补运行时权限本地管理员写 IIS 绑定、建计划任务都需要网络出站 80/443 可达 ACME 服务端验证环节要用磁盘便携版解压后约几十 MB留出日志与证书目录空间2.2 权限与目录规划别把工具解压到桌面很多人图省事解压到桌面或者下载目录结果建计划任务时路径带空格、带中文用户名任务跑起来找不到 exe。我一般固定放C:\Tools\win-acme路径全英文无空格。解压后目录里会有wacs.exe这是主程序settings.json是配置Renewals目录存续期任务定义。整个目录建议给 Administrators 完全控制普通用户只读因为里面会落私钥文件。提示便携版升级时不要覆盖式解压到同一目录先把旧目录改名备份再解压新版本然后把settings.json和Renewals拷过去这样出问题能立刻切回。2.3 验证方式先想清楚http-01 还是 dns-01这一步决定了后面申请能不能一次过。http-01 要求域名解析到本机、80 端口对外可达win-acme 会在站点根目录下写一个验证文件让 CA 回读dns-01 则是在 DNS 里加一条 TXT 记录适合 80 端口被封或者域名不在本机的情况。IIS 单机多站点场景http-01 最省事如果站点前面挂了别的网关、80 端口不直接通到这台机器就别硬上 http-01老老实实走 dns-01 手动或脚本加记录。这个判断做错后面所有步骤都是白忙。3. 安装与首次申请从解压到拿到第一张证书3.1 解压与首次运行交互式向导怎么走把下载的 zip 解压到C:\Tools\win-acme以管理员身份打开命令提示符切到该目录执行cd /d C:\Tools\win-acme wacs.exe不带参数运行会进入交互式菜单这是新手最稳的入口。菜单里依次会让你选新建证书M、输入域名、选验证方式、选证书存储位置IIS 站点 / PEM 文件 / PFX、是否建续期任务。第一次跑建议全程走菜单把每一步的输出看清楚尤其是验证文件写到哪个物理路径、CA 回读的 URL 是什么。走完一遍你就知道这套流程的“黑匣子”里装了什么后面再改成命令行参数就有底了。3.2 用命令行参数做可复现的申请交互式适合第一次但生产环境我更倾向把参数固定下来方便写进部署脚本。下面这条是 http-01 验证、绑定到 IIS 站点、自动建续期任务的典型写法wacs.exe --target iis --host example.com --validation filesystem ^ --webroot C:\inetpub\wwwroot --installation iis ^ --accepttos --emailaddress opsexample.com逐段说明--target iis表示从 IIS 里读站点信息--host是要签的域名多个域名用逗号分隔--validation filesystem是 http-01 的落地方式把验证文件写到--webroot指定的物理目录这个目录必须正好是对应站点的根目录写错一层就验证失败--installation iis表示签完直接更新 IIS 绑定--accepttos接受服务条款缺了它会卡在确认环节--emailaddress用于到期提醒和账户找回。参数之间用^换行是 Windows 命令行的续行符写成一行也行。注意--webroot指向的目录要对 IIS 应用池身份可读验证文件是临时写入又删除的目录权限不足会表现为“文件写不进去”或“CA 读不到”。3.3 证书落地位置与 IIS 绑定申请成功后证书默认进 Windows 证书存储同时按--installation iis更新站点绑定。如果你要的是 PFX 文件给别的服务用把--installation iis换成--store pfx --pfxfile C:\Certs\example.pfx --pfxpassword 强密码。PFX 密码别写死在脚本里明文提交到代码库我一般从环境变量读或者用单独的配置文件。绑定完成后去 IIS 管理器看站点绑定的证书是不是新签发的那个别只看 win-acme 的输出说成功——工具说成功、IIS 没换上这种“假成功”我见过不止一次。4. 续期任务与配置调优让证书自己活下去4.1 计划任务是怎么建出来的win-acme 在申请时如果选了建续期任务会在 Windows 任务计划程序里生成一个名为win-acme renew之类的任务默认每天跑一次检查哪些证书临近到期再执行续期。你可以用命令行确认schtasks /query /tn win-acme renew /v /fo list看“任务要运行的程序”是不是指向C:\Tools\win-acme\wacs.exe参数里有没有--renew --baseuri。如果路径对不上多半是当初解压位置变了或者用了相对路径。任务跑的身份要是 SYSTEM 或管理员账户否则写 IIS 绑定会权限不足。我一般把触发时间设在凌晨低峰避免续期瞬间的验证文件写入影响正常访问。4.2 settings.json 里值得改的几个键settings.json是全局配置几个键值得关注ClientName用于在 CA 侧区分实例ConfigurationPath指向续期任务定义目录日志相关配置决定排错时有没有足够信息。改之前先备份原文件改完用wacs.exe --renew --force手动触发一次验证配置没写坏。JSON 里少个逗号、多个尾逗号都会让工具启动即报错这类低级错误在排错时最浪费时间。4.3 续期失败时的日志在哪看默认日志在工具目录的log子目录按日期分文件。续期失败先看最新日志里的验证环节是 DNS 解析不对、80 端口不通还是验证文件 404。日志里会打印 CA 返回的具体错误码比任务计划程序里那句“上次运行结果 0x1”有用得多。养成续期后隔天看一眼日志的习惯比等三个月后浏览器报警强。5. 避坑与排查五条踩过的真实记录5.1 现象申请一直卡在验证日志显示 404原因--webroot指向的目录不是站点实际根目录或者站点有 URL 重写规则把/.well-known/acme-challenge/路径拦掉了。解决先在浏览器手动访问验证 URL 确认能读到文件检查 web.config 里的 rewrite 规则给.well-known加排除IIS 站点根目录以 IIS 管理器里“基本设置”的物理路径为准别凭印象填。5.2 现象证书签发成功但 IIS 绑定没变原因--installation iis没加或者加上了但当前账户对站点没有写权限。解决确认命令里带了安装参数用管理员身份重跑去 IIS 管理器核对绑定必要时手动选一次新证书再让工具接管。工具输出“成功”只代表证书拿到了不代表绑定换上了。5.3 现象计划任务显示运行成功证书还是过期原因任务指向的 exe 路径失效目录被移动或改名或者任务身份权限不足导致续期静默失败。解决schtasks /query核对路径把任务身份改成 SYSTEM 试跑一次用--renew --force手动跑看真实报错。别信任务计划程序那个“成功”状态它只代表进程启动了。5.4 现象升级版本后原来的命令报参数错误原因不同小版本之间参数名有调整老脚本照抄新版本会不认。解决升级前把旧目录备份升级后先用wacs.exe --help对照参数把常用命令写进一个.cmd脚本并加注释升级时逐条核对。版本号锁在 v2.1.18 的团队升级要当成一次小变更来对待。5.5 现象PFX 导出后别的服务导入报私钥不可用原因导出时没勾选“导出私钥”或者密码里含特殊字符在脚本里被转义。解决确认--pfxpassword传的是完整密码用证书管理器打开 PFX 验证含私钥脚本里密码从环境变量读避免引号嵌套问题。6. 装完怎么验证跑通三步确认加一个习惯装完不等于跑通我一般按三步确认。第一步手动强制续期一次wacs.exe --renew --force --verbose--force忽略到期判断直接执行--verbose打出详细过程。看输出里验证环节是否通过、证书是否写入存储、IIS 绑定是否更新三步都绿才算过。第二步去 IIS 管理器逐个站点看绑定证书的颁发者和有效期和 win-acme 输出里的指纹对一下。第三步用浏览器或curl -vI https://你的域名看实际返回的证书是不是新的别只信本地存储——中间可能有负载均衡或缓存层。验证项命令/位置通过标准续期流程wacs.exe --renew --force --verbose无报错输出含成功字样IIS 绑定IIS 管理器站点绑定证书指纹与签发结果一致外部实际curl -vI https://域名返回证书有效期为新计划任务schtasks /query /tn win-acme renew路径与身份正确最后说个习惯。早些年我图快签完证书看工具说成功就收工结果三个月后站点又红了一次排查半天发现是计划任务指向的目录被同事整理时挪了位置。从那以后我每次装完 win-acme都强制走一遍“强制续期 IIS 绑定核对 外部 curl 验证”这三步并且把计划任务的路径单独记一笔。证书这东西平时没人看出事就是全站不可访问多花十分钟验证省的是半夜被叫起来的时间。希望帮到你。本文还有配套的精品资源点击获取