
简介win-acme.v2.1.18-x64 是一款面向 Windows 平台、用于自动化申请与续订 Lets Encrypt 免费 SSL 证书的工具适合个人站长、小型项目开发者及需要为 IIS 等 Web 服务启用 HTTPS 的运维人员。它基于 ACME 协议实现证书申请、安装、自动续订与多域名通配符管理并提供命令行接口与日志报告帮助用户在不购买付费证书的前提下完成网站安全加固。资源包共 27 个文件以 15 个 ps1 脚本、4 个 dll 运行库、2 个 json 配置、2 个 bat 批处理及 exe、xml、dat、txt 等辅助文件为主压缩包约 29.58MB结构清晰便于直接部署。目前已有 332 人学习下载读者可借此掌握证书申请验证、自动续期与多域名覆盖的完整流程并参考日志排查常见问题是提升站点安全性的实用工具。1. 从一张即将过期的证书说起win-acme 到底解决了什么凌晨两点监控告警群里弹出一条消息某内部管理后台的 HTTPS 证书还有 6 天到期。这个后台跑在一台 Windows Server 上用的是 IIS证书是两年前手动申请的免费证书当时负责的同事已经离职续期流程没人记得。翻遍文档只找到一句“去某平台申请下载导入 IIS”。问题是那个平台早就改了界面而且手动续期这件事本身就是个定时炸弹。这就是 win-acme 这类工具存在的意义。它是一个在 Windows 上运行的 ACME 协议客户端专门用来申请和自动续期免费域名证书并且能直接把证书装进 IIS、Exchange、RD 网关等 Windows 原生服务里。标题里的 v2.1.18-x64 指的是它的一个 64 位版本x64 意味着它跑在 64 位 Windows 上能调用系统原生的加密库。它解决的不是“怎么申请一张证书”而是“怎么让证书这件事从此不用人管”。适合谁手上有一堆 Windows 服务器、跑着 IIS 或其它 Windows 服务、又不想为证书掏钱也不想每月手动续期的运维和开发。如果你只用 Linux 和 Nginx这东西不是你的菜但只要你的环境里有 Windows IIS它值得你花一个下午把它跑通。2. 先搞懂 ACME 和 win-acme 的选型逻辑为什么不是手动申请2.1 ACME 协议到底在做什么ACME 是自动证书管理环境Automatic Certificate Management Environment的缩写它定义了一套客户端和证书颁发机构之间的交互流程。核心动作有三个客户端生成一对密钥向 CA 证明自己拥有某个域名域名验证然后 CA 签发证书。域名验证常见的方式有两种HTTP-01 和 DNS-01。HTTP-01 要求你在域名的 80 端口上放一个特定文件CA 来访问能拿到就算通过DNS-01 要求你在域名的 DNS 里加一条 TXT 记录CA 查询到就算通过。win-acme 把这三个动作全部自动化了。你告诉它域名和验证方式它去申请拿到证书后按你指定的方式安装然后在证书快过期时自动重复整个过程。手动申请的问题不在于难而在于“每次都要记得”。证书有效期通常是 90 天一年要操作四次只要有一次忘了服务就挂了。ACME 的价值就是把“记得”这件事从人脑里拿掉。2.2 为什么在 Windows 上选 win-acme 而不是别的Windows 上的 ACME 客户端不止一个选 win-acme 的理由很实际。第一它对 IIS 的支持是原生的申请完可以直接绑定到站点不需要手动导入导出 PFX。第二它支持“安装后执行脚本”这意味着你可以把证书同步到非 IIS 的服务里比如某个自建的 API 网关或者 Tomcat。第三它的交互式向导做得足够傻瓜第一次跑的时候跟着问答题走就能完成不需要先读完整文档。第四它把配置持久化在本地续期任务通过 Windows 任务计划程序触发不依赖任何外部服务常驻。选型时要注意一个边界win-acme 本身不提供域名也不提供 CA它只是一个客户端。你需要有一个能解析的域名以及一个支持 ACME 的 CA。常见的免费 CA 是 Lets Encryptwin-acme 默认就用它。如果你的域名 DNS 服务商不支持 API 操作DNS-01 验证就没法全自动只能手动加 TXT 记录那就退化成半自动了。这一点在选型时要先确认。2.3 下载与首次运行x64 版本的正确打开方式拿到 win-acme 之后不要双击 exe 就完事。正确的做法是把它解压到一个固定目录比如C:\tools\win-acme然后用管理员权限打开命令行cd 进去再运行。原因很简单它需要写日志、写配置文件、调用系统证书存储这些操作在普通权限下会失败而且失败信息不一定直观。# 以管理员身份打开 PowerShell进入解压目录 cd C:\tools\win-acme # 首次运行进入交互式向导 .\wacs.exe运行后会看到一个菜单选项包括“新建证书”“续期已有证书”“查看已有证书”等。第一次选新建。接下来的问题包括域名是什么、用什么方式验证、证书装到哪里。如果你有多个域名可以一次输入多个用逗号分隔。验证方式如果选 HTTP-01它会自动在 IIS 里创建一个临时站点来响应验证请求验证完再删掉。这一步是 win-acme 比较聪明的地方它不需要你手动放文件。参数说明wacs.exe不带参数时进入交互模式带--target iis可以指定目标为 IIS带--validation selfhosting表示用自托管方式做 HTTP 验证。这些参数在写自动化脚本时有用第一次跑建议还是走交互看清楚每一步在问什么。3. 用 win-acme 在 IIS 上跑通第一张证书从向导到自动续期3.1 交互式向导的每一步在问什么交互式向导的第一个关键问题是“你想做什么”。选“Create new certificate”之后它会问“你想为哪些域名申请”。这里输入你的域名比如app.example.com。如果有多个用逗号隔开比如app.example.com,api.example.com。注意域名必须已经解析到这台服务器的公网 IP否则 HTTP-01 验证会失败。第二个关键问题是验证方式。默认推荐“SelfHosting”也就是 win-acme 自己起一个临时的 HTTP 监听来响应 CA 的验证请求。这个方式要求 80 端口没有被别的程序占用。如果 80 端口已经被 IIS 的某个站点占用了win-acme 会尝试通过 IIS 的配置来临时接管通常能成功但偶尔会因为 IIS 的绑定冲突而失败。失败时它会提示你你可以换成“Filesystem”方式手动把验证文件放到指定目录但那就不是全自动了。第三个问题是证书存储。选“PEM encoded files”还是“Windows Certificate Store”。如果你要绑定到 IIS选 Windows Certificate Store 更省事它会直接导入并让 IIS 能选到。如果还要给别的服务用可以同时导出 PEM 文件到指定目录。3.2 把证书绑定到 IIS 站点自动绑定的条件和手动兜底向导走到最后会问“是否自动绑定到 IIS 站点”。如果选是它会列出当前 IIS 里的站点你选一个它会把证书绑上去。自动绑定的前提是站点已经存在且绑定的域名和证书里的域名一致。如果站点还没建或者域名对不上自动绑定会失败。这时候不要慌先让 win-acme 把证书申请下来并导入证书存储然后手动去 IIS 管理器里绑定。手动绑定的步骤打开 IIS 管理器选中站点点“绑定”添加一个 https 绑定端口 443SSL 证书下拉里选刚导入的那张。如果下拉里看不到说明证书没有导入到“本地计算机\个人”存储里可以重新跑一次 win-acme在存储那一步选 Windows Certificate Store。# 如果自动绑定失败可以先用命令只申请证书不绑定 .\wacs.exe --target manual --host app.example.com --validation selfhosting --store windowscert这条命令的意思是目标设为手动不自动绑定主机名是 app.example.com验证方式自托管存储到 Windows 证书存储。跑完之后去 IIS 里手动绑。参数--store windowscert是关键少了它证书不会进系统存储。3.3 自动续期是怎么被触发的win-acme 在申请成功后会创建一个 Windows 任务计划默认每天跑一次检查证书是否接近过期。如果距离过期还有 30 天以内它就自动续期。这个任务的名字通常包含 “win-acme renew” 字样可以在任务计划程序里找到。你可以手动改触发时间但不建议改逻辑。验证续期是否生效可以看 win-acme 的日志目录默认在解压目录下的logs文件夹里。每次运行都会写一个日志文件里面记录了检查结果和续期动作。如果日志里出现 “Certificate is not due for renewal” 说明还没到时间出现 “Renewing certificate” 说明正在续。续期成功后如果之前绑定了 IIS它会自动更新绑定不需要人工干预。提示如果服务器有多张证书win-acme 会为每张证书单独建一个续期任务任务名里会带域名方便区分。4. 避坑win-acme 在真实环境里最容易翻车的五个地方4.1 80 端口被占用导致 HTTP 验证失败现象向导跑到验证那一步卡住日志里出现 “Unable to listen on port 80” 或者 “Validation failed”。原因服务器上已经有别的程序在监听 80 端口比如另一个 IIS 站点、或者某个自建服务。win-acme 的自托管验证需要临时占用 80 端口如果被占它没法响应 CA 的请求。解决先确认 80 端口被谁占了用netstat -ano | findstr :80找到进程 ID再决定是临时停掉那个服务还是改用 DNS 验证。如果那个服务不能停就换 DNS-01 方式但前提是你的 DNS 服务商支持 API。如果不支持只能手动加 TXT 记录那就变成半自动了。4.2 域名解析没生效就急着申请现象验证一直失败日志里显示 CA 访问验证地址时返回 404 或超时。原因域名虽然解析了但 DNS 缓存还没刷新或者解析到了错误的 IP。win-acme 不会帮你检查解析它只管发请求。解决申请之前先用nslookup app.example.com确认解析到本机公网 IP。如果是刚改的解析等几分钟再试。另外如果服务器在 NAT 后面要确保公网 IP 的 80 端口映射到了这台机器。4.3 证书导入成功但 IIS 绑定下拉里看不到现象win-acme 提示申请成功但去 IIS 里绑定 https 时SSL 证书下拉列表是空的。原因证书被导入到了当前用户的存储而不是“本地计算机”的存储。IIS 只认本地计算机存储。解决重新跑一次 win-acme在存储那一步明确选 “Windows Certificate Store”并且注意它问的是 “Local Machine” 还是 “Current User”。选 Local Machine。如果已经导错了可以用 certlm.msc 打开本地计算机证书管理器手动把证书从“个人”里删掉再重来。4.4 续期任务跑了但证书没更新现象任务计划里看到 win-acme 的任务执行成功但 IIS 里绑定的证书还是旧的。原因续期成功后win-acme 会尝试更新 IIS 绑定但如果绑定信息被手动改过或者站点被重建过它可能找不到原来的绑定于是只更新了证书存储里的证书没更新 IIS 的绑定。解决去 win-acme 的日志里搜 “Binding update” 字样看它有没有报错。如果有手动去 IIS 里重新绑定一次新证书。之后不要再手动改绑定让 win-acme 管。4.5 多域名证书里有一个域名验证失败导致整张证书失败现象申请包含三个域名的证书其中两个验证通过一个失败结果整张证书没签下来。原因ACME 的验证是“全部通过才签发”一个失败就全失败。解决先把失败的域名单独拿出来排查确认解析和端口都正常。如果某个域名暂时没法验证就先把它从申请列表里去掉等能验证了再加回来。win-acme 支持后续追加域名重新跑一次向导选“更新已有证书”把新域名加进去。5. 进阶把 win-acme 塞进自动化流程和跨服务同步5.1 用命令行参数替代交互向导交互向导适合第一次但如果你有多台服务器或者想把申请过程写进部署脚本就需要用命令行参数。win-acme 的参数设计得比较直白常用的组合是# 申请证书不自动绑定存储到本地计算机验证用自托管 .\wacs.exe ^ --target manual ^ --host app.example.com,api.example.com ^ --validation selfhosting ^ --store windowscert ^ --accepttos ^ --emailaddress adminexample.com--accepttos表示接受 CA 的服务条款自动化时必须加否则会卡在交互确认。--emailaddress用于接收证书过期提醒虽然 win-acme 自己会续期但填一个邮箱多一层保险。^是 Windows 命令行的换行符在 PowerShell 里用反引号。5.2 证书申请后执行脚本同步到非 IIS 服务win-acme 支持在证书更新后执行一个脚本把证书文件复制到别的目录或者重启某个服务。这个功能在混合环境里很有用。比如你有一台 Windows 服务器跑 IIS同时还有一个 Java 服务需要同一张证书就可以用脚本把 PEM 文件拷过去并重启 Java 服务。# 在申请命令里加 --script 参数指向一个批处理文件 .\wacs.exe ^ --target manual ^ --host app.example.com ^ --validation selfhosting ^ --store pemfiles ^ --pemfilespath C:\certs\app ^ --script C:\tools\sync-cert.bat ^ --scriptparameters {CertPath}--store pemfiles表示导出 PEM 格式--pemfilespath指定导出目录。--script指定要执行的脚本--scriptparameters把证书路径作为参数传进去。脚本里可以写复制文件、调用服务重启命令等。注意脚本要以管理员权限运行否则可能没权限写目标目录。5.3 验证续期是否真的生效一个简单的检查习惯不要等到证书过期那天才发现续期没生效。我自己的习惯是在申请成功后的第二天手动去 win-acme 的日志目录看一眼最近的日志确认它跑了一次检查并且结果是“不需要续期”。然后在一个月后再去看一次确认它至少执行过一次检查。如果日志里连续几天没有新记录说明任务计划可能被禁用了或者 win-acme 的目录被移动了导致任务路径失效。另一个习惯是在 IIS 里绑好证书后用浏览器访问一下点开证书详情记下有效期。然后在日历上设一个提醒在有效期前 40 天的时候再去日志里确认一次。这个动作花不了两分钟但能避免半夜被叫起来处理证书过期。证书这件事自动化工具能解决 95% 的问题剩下的 5% 靠的是你偶尔看一眼日志。希望帮到你。本文还有配套的精品资源点击获取