在 IIS 中实现 SSL 证书的自动续期,最主流和推荐的方法是使用开源工具 win-acme。它可以自动从 Let's Encrypt 申请免费证书,并配置好自动续期任务。
以下是使用 win-acme 实现 IIS SSL 证书自动续期的完整步骤:
🛠️ 第一步:下载并配置 win-acme
- 访问
win-acme的官方 GitHub 发布页面:https://github.com/win-acme/win-acme。 - 下载推荐的
pluggable版本(例如win-acme.v2.x.x.xxxx.x64.pluggable.zip),这个版本自带运行时,无需额外安装 .NET 环境。 - 将下载的压缩包解压到服务器的一个固定目录,例如
C:\win-acme。

pluggable 版本 (功能完整版)
这是推荐的下载版本,特别是对于初次使用者或需要更多功能的用户。
- 功能完整 :包含了
win-acme所有的验证插件(如 DNS 验证、HTTP 验证、TLS 验证)、存储插件(如 IIS、PEM、PFX)等。- 适用场景广 :
- 支持所有类型的域名验证,包括需要 DNS API 验证的通配符证书 (
*.example.com)。- 支持集成各种云服务,如 Azure、AWS Route53、阿里云、腾讯云等 DNS 服务商的 API。
- 可以将证书存储为 PEM、PFX 文件,或存入 Windows 证书存储、IIS 中央存储等。
- 文件体积大:因为包含了所有组件,所以压缩包和占用空间都更大。
- 自带运行时 :通常
pluggable版本会自带 .NET 运行时,无需在服务器上额外安装,开箱即用。trimmed 版本 (精简版)
这个版本是为了追求极致小巧而设计的,但牺牲了大部分高级功能。
- 功能精简:移除了绝大多数插件,只保留了最核心的功能。
- 适用场景单一 :
- 主要用于最简单的 IIS 站点 SSL 证书申请和续期。
- 通常只支持标准的
http-01验证方式。- 不支持通配符证书、DNS API 验证等高级功能。
- 文件体积小:由于移除了大量组件,压缩包和占用空间都非常小
🚀 第二步:首次申请并部署证书

- 以管理员身份 运行解压目录下的
wacs.exe程序。 - 程序启动后,在命令行菜单中选择
N(Create certificate (default settings)),使用默认设置创建证书。 - 工具会自动扫描并列出 IIS 中的所有站点。选择你想要申请证书的站点编号。
- 接着,选择
Single binding of an IIS site,然后选择你要绑定的域名。 - 阅读并同意 Let's Encrypt 的服务条款,并按提示输入一个有效的邮箱地址,用于接收证书到期等通知。
- 选择验证方式,通常选择
http-01(通过 80 端口验证域名所有权)。 - 选择安装方式为
IIS,工具会自动将证书绑定到 IIS 站点的 443 端口。
完成以上步骤后,win-acme 会自动完成证书的申请、下载和在 IIS 中的部署。你可以回到 IIS 管理器中刷新站点,确认 HTTPS 绑定已经生效。
win-acme在尝试自动扫描 IIS 站点时,没有发现任何配置了"主机名"(Host Binding)的网站。
win-acme的Simple模式依赖于 IIS 中已有的绑定信息来推断你要为哪个域名申请证书。如果 IIS 里的网站绑定是空的,或者只绑定了 IP 而没有填域名,它就会报这个错。你需要确保在 IIS 中已经添加了一个网站,并且该网站绑定了具体的域名。
- 打开 IIS 管理器 (
inetmgr)。- 在左侧连接面板中,展开服务器节点,点击 "网站"。
- 确保你有一个网站(例如
Default Web Site或你自己新建的站点)。- 关键步骤 :右键点击该网站,选择 "编辑绑定..."。
- 查看列表中的
http或https条目:
- 错误情况 :如果"主机名"一栏是空的,或者只有 IP 地址。
- 正确情况 :必须在 "主机名" 栏填入你的域名(例如
www.example.com或example.com)。- 如果没有,请点击"添加",类型选
http,端口80,在 主机名 处填入你的域名,然后保存。修复后 :回到
win-acme命令行,重新运行wacs.exe,它应该就能识别到网站了。
Plugin IIS generated source vx.chxi.ltd with 1 identifiersPlugin Single created 1 order
vx.chxi.ltd\] Authorizing... \[vx.chxi.ltd\] Authorizing using http-01 validation (SelfHosting) \[vx.chxi.ltd\] Authorization result: valid Downloading certificate \[IIS\] Default Web Site, (any host) Store with CertificateStore... Installing certificate in the certificate store Adding certificate \[IIS\] Default Web Site, (any host) @ 2026/4/12 in store WebHosting Adding certificate CN=R12, O=Let's Encrypt, C=US in store CA Installing with IIS... Adding new https binding \*:443:vx.chxi.ltd Committing 1 https binding changes to IIS while updating site 1 Adding Task Scheduler entry with the following settings - Name win-acme renew (acme-v02.api.letsencrypt.org) - Path C:\\Users\\Administrator\\Downloads - Command wacs.exe --renew --baseuri "https://acme-v02.api.letsencrypt.org/" - Start at 09:00:00 - Random delay 04:00:00 - Time limit 02:00:00 Adding renewal for \[IIS\] Default Web Site, (any host) Next renewal due after 2026/6/6 ##### 证书申请与验证阶段 | 日志原文 | 中文翻译与解释 | |--------------------------------------------------------------------|----------------------------------------------------------------------------------| | `Plugin IIS generated source vx.chxi.ltd with 1 identifiers` | **插件 IIS 生成了源域名 `vx.chxi.ltd`,包含 1 个标识符。** 工具从 IIS 中读取到了你要申请证书的域名。 | | `Plugin Single created 1 order` | **插件 Single 创建了 1 个订单。** 向证书颁发机构发起申请请求。 | | `[vx.chxi.ltd] Authorizing...` | **正在对 `vx.chxi.ltd` 进行授权验证...** 开始验证你是否拥有这个域名的控制权。 | | `[vx.chxi.ltd] Authorizing using http-01 validation (SelfHosting)` | **正在使用 http-01 验证方式(自托管)进行授权。** 工具在本地 80 端口开启了一个临时服务,等待 Let's Encrypt 的服务器来访问验证。 | | `[vx.chxi.ltd] Authorization result: valid` | **授权结果:有效。** 验证成功!证明了你拥有该域名。 | ##### 安装与部署阶段 | 日志原文 | 中文翻译与解释 | |------------------------------------------------|----------------------------------------------------------------------------| | `Downloading certificate ...` | **正在下载证书 \[IIS\] Default Web Site...** 从服务器获取证书文件。 | | `Store with CertificateStore...` | **使用证书存储库进行存储...** 准备将证书存入 Windows 系统。 | | `Adding certificate ... in store WebHosting` | **将证书添加到 WebHosting 存储区。** 证书已安全存入系统证书库。 | | `Adding certificate CN=R12... in store CA` | **将中间证书添加到 CA 存储区。** 自动下载并安装了 Let's Encrypt 的中间证书(R12),确保证书链完整。 | | `Installing with IIS...` | **正在使用 IIS 进行安装...** 准备修改 IIS 配置。 | | `Adding new https binding *:443:vx.chxi.ltd` | \*\*添加新的 HTTPS 绑定 \*:443:vx.chxi.ltd。\*\* 自动在 IIS 中为你的站点开启了 443 端口,并绑定了域名。 | | `Committing 1 https binding changes to IIS...` | **提交 1 个 HTTPS 绑定更改到 IIS...** 保存了 IIS 的配置更改。 | ##### 自动续期配置阶段 这是最关键的一步,确保证书在 3 个月后(Let's Encrypt 证书有效期)能自动更新,无需人工干预。 | 日志原文 | 中文翻译与解释 | |-----------------------------------|------------------------------------------------------------| | `Adding Task Scheduler entry...` | **正在添加任务计划程序条目...** 正在创建 Windows 计划任务。 | | `- Name win-acme renew ...` | **- 名称:`win-acme renew`** 任务的名字。 | | `- Command wacs.exe --renew ...` | **- 命令:`wacs.exe --renew ...`** 设置的任务内容是自动运行续期命令。 | | `- Start at 09:00:00` | **- 启动时间:09:00:00** 每天早上 9 点检查一次。 | | `- Random delay 04:00:00` | **- 随机延迟:04:00:00** 为了避免服务器拥堵,会在 09:00 到 13:00 之间随机找个时间执行。 | | `Adding renewal for ...` | **为该站点添加了续期记录。** | | `Next renewal due after 2026/6/6` | **下次续期检查时间在 2026年6月6日 之后。** 证书通常在过期前 30 天自动续期,所以显示的时间比现在晚。 | #### 整个过程非常顺利,**无需你进行任何操作** 。 你的网站 `vx.chxi.ltd` 现在已经开启了 HTTPS,并且系统会在后台自动维护证书的有效性。
win-acme 在首次成功后,通常会提示是否创建计划任务,选择"是"即可。如果未自动创建,可以手动配置,以确保长期稳定运行:
-
创建批处理脚本
在
win-acme的安装目录(如C:\win-acme)下,创建一个名为renew_cert.bat的文件,chcp 65001 @echo off REM ============================================= REM 自动续签 win-acme HTTPS 证书脚本 REM ============================================= REM 设置当前路径 (请根据实际安装路径修改) cd /d C:\win-acme REM 执行自动更新命令 wacs.exe --renew REM ============================================= echo [%date% %time%] 证书自动更新任务已执行完毕。 -
测试脚本
在命令行中运行一次这个
renew_cert.bat脚本,确认它能成功执行,没有报错。 -
配置 Windows 任务计划程序
- 按
Win + R键,输入taskschd.msc并回车,打开"任务计划程序"。 - 在右侧操作栏点击"创建任务..."。
- 常规 :
- 名称:例如
Win-ACME Auto Renewal。 - 勾选 "不管用户是否登录都要运行"。
- 勾选 "使用最高权限运行"。
- 名称:例如
- 触发器 :
- 点击"新建...",设置一个触发频率。例如,每天凌晨 2 点执行一次。
win-acme自身会判断证书是否真的需要续期,所以每天执行是安全的。
- 点击"新建...",设置一个触发频率。例如,每天凌晨 2 点执行一次。
- 操作 :
- 点击"新建...",操作选择"启动程序"。
- 在"程序或脚本"框中,浏览并选择你刚才创建的
renew_cert.bat文件。
- 点击"确定"保存任务,并根据提示输入管理员账户密码。
- 按
完成以上配置后,win-acme 就会通过 Windows 计划任务定期检查并自动续期你的 SSL 证书,实现真正的无人值守。

