在 IIS 中实现 SSL 证书的自动续期

在 IIS 中实现 SSL 证书的自动续期,最主流和推荐的方法是使用开源工具 win-acme。它可以自动从 Let's Encrypt 申请免费证书,并配置好自动续期任务。

以下是使用 win-acme 实现 IIS SSL 证书自动续期的完整步骤:

🛠️ 第一步:下载并配置 win-acme

  1. 访问 win-acme 的官方 GitHub 发布页面:https://github.com/win-acme/win-acme
  2. 下载推荐的 pluggable 版本(例如 win-acme.v2.x.x.xxxx.x64.pluggable.zip),这个版本自带运行时,无需额外安装 .NET 环境。
  3. 将下载的压缩包解压到服务器的一个固定目录,例如 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 验证等高级功能。
  • 文件体积小:由于移除了大量组件,压缩包和占用空间都非常小

🚀 第二步:首次申请并部署证书

  1. 管理员身份 运行解压目录下的 wacs.exe 程序。
  2. 程序启动后,在命令行菜单中选择 N (Create certificate (default settings)),使用默认设置创建证书。
  3. 工具会自动扫描并列出 IIS 中的所有站点。选择你想要申请证书的站点编号。
  4. 接着,选择 Single binding of an IIS site,然后选择你要绑定的域名。
  5. 阅读并同意 Let's Encrypt 的服务条款,并按提示输入一个有效的邮箱地址,用于接收证书到期等通知。
  6. 选择验证方式,通常选择 http-01(通过 80 端口验证域名所有权)。
  7. 选择安装方式为 IIS,工具会自动将证书绑定到 IIS 站点的 443 端口。

完成以上步骤后,win-acme 会自动完成证书的申请、下载和在 IIS 中的部署。你可以回到 IIS 管理器中刷新站点,确认 HTTPS 绑定已经生效。

win-acme 在尝试自动扫描 IIS 站点时,没有发现任何配置了"主机名"(Host Binding)的网站

win-acmeSimple 模式依赖于 IIS 中已有的绑定信息来推断你要为哪个域名申请证书。如果 IIS 里的网站绑定是空的,或者只绑定了 IP 而没有填域名,它就会报这个错。

你需要确保在 IIS 中已经添加了一个网站,并且该网站绑定了具体的域名。

  1. 打开 IIS 管理器 (inetmgr)。
  2. 在左侧连接面板中,展开服务器节点,点击 "网站"
  3. 确保你有一个网站(例如 Default Web Site 或你自己新建的站点)。
  4. 关键步骤 :右键点击该网站,选择 "编辑绑定..."
  5. 查看列表中的 httphttps 条目:
    • 错误情况 :如果"主机名"一栏是的,或者只有 IP 地址。
    • 正确情况 :必须在 "主机名" 栏填入你的域名(例如 www.example.comexample.com)。
  6. 如果没有,请点击"添加",类型选 http,端口 80,在 主机名 处填入你的域名,然后保存。

修复后 :回到 win-acme 命令行,重新运行 wacs.exe,它应该就能识别到网站了。
Plugin IIS generated source vx.chxi.ltd with 1 identifiers

Plugin 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

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 在首次成功后,通常会提示是否创建计划任务,选择"是"即可。如果未自动创建,可以手动配置,以确保长期稳定运行:

  1. 创建批处理脚本

    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%] 证书自动更新任务已执行完毕。
  2. 测试脚本

    在命令行中运行一次这个 renew_cert.bat 脚本,确认它能成功执行,没有报错。

  3. 配置 Windows 任务计划程序

    • Win + R 键,输入 taskschd.msc 并回车,打开"任务计划程序"。
    • 在右侧操作栏点击"创建任务..."。
    • 常规
      • 名称:例如 Win-ACME Auto Renewal
      • 勾选 "不管用户是否登录都要运行"
      • 勾选 "使用最高权限运行"
    • 触发器
      • 点击"新建...",设置一个触发频率。例如,每天凌晨 2 点执行一次。win-acme 自身会判断证书是否真的需要续期,所以每天执行是安全的。
    • 操作
      • 点击"新建...",操作选择"启动程序"。
      • 在"程序或脚本"框中,浏览并选择你刚才创建的 renew_cert.bat 文件。
    • 点击"确定"保存任务,并根据提示输入管理员账户密码。

完成以上配置后,win-acme 就会通过 Windows 计划任务定期检查并自动续期你的 SSL 证书,实现真正的无人值守。

相关推荐
UXbot4 分钟前
帮助企业低门槛开展AI应用开发的平台推荐
前端·低代码·ui·交互·产品经理·原型模式·web app
橘子星30 分钟前
基于 Vite 的多模态生图前端工程实践
前端·javascript·人工智能
想要成为糕糕手30 分钟前
从零到一:CSS 3D 旋转立方体完全指南
前端·css·canvas
疯狂的魔鬼32 分钟前
多角色督办任务详情页:从权限矩阵到组件拆分的完整实现
前端·vue.js·架构
恋猫de小郭33 分钟前
Android 17 正式版发布,全新 AI 和各种破坏性更新
android·前端·flutter
半个落月37 分钟前
从零搭建 AI 生图前端|Vite 工程化 + 通义千问 API 实战,附 API Key 安全方案
前端·人工智能
codexu_46122918740 分钟前
NoteGen 里一条记录如何变成 Markdown
前端·笔记·rust·tauri
meilindehuzi_a43 分钟前
从 Canvas 到 Vibe Coding:HTML5 游戏开发入门与 AI 飞机大战实战
前端·人工智能·html5
lichenyang4531 小时前
鸿蒙 Web 容器(一):怎么把一个 H5 页面嵌进鸿蒙页面?
前端
奇奇怪怪的1 小时前
浏览器线程与进程深度剖析
前端