Windows IIS 配置本地HTTPS 全流程指南:自签名证书 + 端口绑定 + 避坑详解

在本地开发或内网服务部署中,经常需要为 IIS 站点配置 HTTPS。虽然网上教程众多,但实际操作时往往会遇到 PowerShell 绑定报错浏览器拒绝访问openssl 命令找不到 等连环坑。

本文基于 Windows Server / Windows 10/11 环境,梳理了一套经过验证的完整流程,包含证书生成、IIS 绑定、防火墙放行及常见问题排查,建议收藏备用。


一、 前置准备:安装 OpenSSL

IIS 本身不支持直接生成 PFX 证书,我们需要借助 OpenSSL。

推荐安装方式(Winget)

打开 管理员 PowerShell

powershell 复制代码
winget install ShiningLight.OpenSSL.Light

⚠️ 关键提醒 :安装完成后,必须完全关闭并重新打开 PowerShell 窗口,否则 openssl 命令无法识别。若重开后仍报错,需手动将 C:\Program Files\OpenSSL-Win64\bin 添加到系统环境变量 PATH 中。

验证安装:

powershell 复制代码
openssl version
# 预期输出:OpenSSL 3.x.x 或 4.x.x

二、 生成自签名证书(PFX)

1. 创建证书目录

powershell 复制代码
New-Item -Path "C:\Certs" -ItemType Directory -Force
cd C:\Certs

2. 生成私钥与证书

powershell 复制代码
# 生成私钥
openssl genrsa -out lan.key 2048

# 生成证书请求(按需修改 CN 和 IP)
openssl req -new -key lan.key -out lan.csr -subj "/CN=LAN HTTPS Cert"

# 签发证书(有效期 3650 天)
openssl x509 -req -days 3650 -in lan.csr -signkey lan.key -out lan.crt

3. 转换为 IIS 可用的 PFX 格式

powershell 复制代码
openssl pkcs12 -export -out lan.pfx -inkey lan.key -in lan.crt -passout pass:YourPassword123

💡 请将 YourPassword123 替换为你自己的强密码,后续导入时需要用到。


三、 导入证书到 Windows 证书存储

使用 PowerShell 一键导入,避免 GUI 操作的路径歧义:

powershell 复制代码
Import-PfxCertificate -FilePath "C:\Certs\lan.pfx" `
    -CertStoreLocation Cert:\LocalMachine\My `
    -Password (ConvertTo-SecureString -String "YourPassword123" -AsPlainText -Force) `
    -Exportable `
    -FriendlyName "LAN HTTPS Cert"

验证导入成功:

powershell 复制代码
Get-ChildItem Cert:\LocalMachine\My | Where-Object { $_.FriendlyName -eq "LAN HTTPS Cert" }

确认返回结果中包含正确的 Thumbprint(指纹)。


四、 IIS 绑定 HTTPS(核心避坑步骤)

❌ 常见错误写法

很多教程推荐使用 New-ItemProperty -Name bindings -Value @{...},该命令在较新版本的 IIS/PowerShell 中会抛出 System.ArgumentException请勿使用此方法!

✅ 正确绑定流程

1. 获取证书指纹
powershell 复制代码
$thumbprint = (Get-ChildItem Cert:\LocalMachine\My |
    Where-Object { $_.FriendlyName -eq "LAN HTTPS Cert" }).Thumbprint

# 安全检查:防止变量为空导致后续静默失败
if ([string]::IsNullOrEmpty($thumbprint)) {
    Write-Host "❌ 未找到证书!请检查 FriendlyName" -ForegroundColor Red
    exit
}
Write-Host "✅ 证书指纹: $thumbprint" -ForegroundColor Green
2. 创建 HTTPS 绑定
powershell 复制代码
# 假设站点名为 "3D",端口 3000
New-WebBinding -Name "3D" -Protocol https -Port 3000 -IPAddress "*" -SslFlags 0
3. 关联证书(二选一)

方法 A:Set-WebBinding(推荐)

powershell 复制代码
Set-WebBinding -Name "3D" -Protocol https -Port 3000 -IPAddress "*" `
    -Thumbprint $thumbprint -SslFlags 0

方法 B:netsh(最可靠,绕过 PS 模块 Bug)

powershell 复制代码
netsh http add sslcert ipport=0.0.0.0:3000 certhash=$thumbprint `
    appid="{00000000-0000-0000-0000-000000000000}" certstorename=MY

五、 防火墙放行(解决"拒绝访问")

IIS 绑定成功 ≠ 外部可访问。"拒绝访问"99% 是防火墙拦截导致的。

powershell 复制代码
New-NetFirewallRule -DisplayName "IIS HTTPS 3000" `
    -Direction Inbound -Protocol TCP -LocalPort 3000 `
    -Action Allow -Profile Any

⚠️ 如果是云服务器(阿里云/AWS/Azure),还需在云控制台的安全组中放行 TCP 3000 端口。Windows 防火墙与云安全组是两层独立过滤,缺一不可。


六、 验证与排错清单

访问测试

测试地址 预期结果 异常分析
https://localhost:3000 浏览器提示证书不安全,点击继续后可访问 正常现象(自签名证书)
https://192.168.x.x:3000 同上 若"拒绝访问"→ 检查防火墙/安全组
http://192.168.x.x:3000 403 或无响应 正常,未配置 HTTP 绑定

快速诊断命令

powershell 复制代码
# 1. 检查站点状态
Get-Website -Name "3D" | Select-Object Name, State

# 2. 检查端口监听
netstat -ano | findstr ":3000"

# 3. 检查 SSL 绑定
netsh http show sslcert ipport=0.0.0.0:3000

# 4. 检查防火墙规则
Get-NetFirewallRule -DisplayName "IIS HTTPS 3000" | Select-Object Enabled, Action

七、 FAQ

Q1:浏览器显示"您的连接不是私密连接"?

这是自签名证书的正常表现。生产环境请使用 Let's Encrypt 或商业 CA 签发的可信证书。本地测试点击"高级 → 继续访问"即可。

Q2:修改了证书后,IIS 仍然使用旧证书?

IIS 会缓存 SSL 绑定。执行以下命令刷新:

powershell 复制代码
iisreset /noforce
# 或删除旧绑定后重新添加
netsh http delete sslcert ipport=0.0.0.0:3000

Q3:Light 版 OpenSSL 够用吗?

完全够用。Light 版仅包含命令行工具和基础 DLL,体积仅几 MB。Full 版包含 C/C++ 开发头文件,除非你要编译依赖 OpenSSL 的程序,否则无需安装。


如果本文解决了你的 IIS HTTPS 配置问题,欢迎点赞收藏!遇到其他报错请在评论区留言交流。

相关推荐
Lsetea4 天前
Nginx报SSL_CTX_use_PrivateKey failed:证书与私钥不匹配怎么排查
nginx·https·ssl证书·openssl·私钥
Lsetea6 天前
SSL证书快过期怎么自动检查:用OpenSSL checkend做7天预警与线上证书验收
https·ssl证书·openssl·systemd·证书监控
DogDaoDao12 天前
Windows 开发提效工具全景指南:60+ 工具的工程化分层配置
windows·git·程序员·开发工具·powershell·everything·msys2
蜡台1 个月前
本机 局域网 搭建本地 HTTPS 域名完整方案
网络协议·http·https·openssl
qetfw1 个月前
Debian OpenSSL CA 证书配置参考:根证书、服务证书与验证
linux·debian·ssl·openssl
winfredzhang1 个月前
用 wxPython 打造「Claude Code 任务启动器」:一个把 AI CLI 变成一键工作流的桌面工具
python·wxpython·powershell·剪贴板·claudecodecli
qetfw1 个月前
Debian OpenSSL 搭建 CA 证书服务:签发、吊销与客户端信任
linux·debian·openssl·ca
鬼手点金1 个月前
Hermes‑Agent 使用教程
python·ubuntu·powershell·cmd·ai agent·opencode·hermes
寒水馨1 个月前
macOS下载、安装PowerShell-v7.6.4(附安装包powershell-7.6.4-osx-arm64.pkg)
macos·自动化·跨平台·shell·脚本·命令行·powershell