云计算百科
云计算领域专业知识百科平台

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

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

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


一、 前置准备:安装 OpenSSL

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

推荐安装方式(Winget)

打开 管理员 PowerShell:

winget install ShiningLight.OpenSSL.Light

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

验证安装:

openssl version
# 预期输出:OpenSSL 3.x.x 或 4.x.x


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

1. 创建证书目录

New-Item Path "C:\\Certs" ItemType Directory Force
cd C:\\Certs

2. 生成私钥与证书

# 生成私钥
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 格式

openssl pkcs12 export out lan.pfx inkey lan.key -in lan.crt passout pass:YourPassword123

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


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

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

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

验证导入成功:

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. 获取证书指纹

$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 绑定

# 假设站点名为 "3D",端口 3000
New-WebBinding Name "3D" Protocol https Port 3000 IPAddress "*" SslFlags 0

3. 关联证书(二选一)

方法 A:Set-WebBinding(推荐)

Set-WebBinding Name "3D" Protocol https Port 3000 IPAddress "*" `
Thumbprint $thumbprint SslFlags 0

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

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


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

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

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 绑定

快速诊断命令

# 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 绑定。执行以下命令刷新:

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

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


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

赞(0)
未经允许不得转载:网硕互联帮助中心 » Windows IIS 配置本地HTTPS 全流程指南:自签名证书 + 端口绑定 + 避坑详解
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!