配置文件 iis-lan-cert.inf
[Version]
Signature="$Windows NT$"
[NewRequest]
Subject = "CN=srv01.local"
KeyLength = 2048
Exportable = TRUE
MachineKeySet = TRUE
ProviderName = "Microsoft RSA SChannel Cryptographic Provider"
RequestType = Cert
KeyUsage = 0xa0
KeySpec = 1
SMIME = FALSE
[EnhancedKeyUsageExtension]
OID = 1.3.6.1.5.5.7.3.1
[Extensions]
; === SAN: change the values below to match your environment ===
2.5.29.17 = "{text}"
_continue_ = "dns=srv01.local&"
_continue_ = "dns=localhost&"
_continue_ = "ipaddress=192.168.1.100&"
要生成带 IP SAN 的证书,用 Windows 自带的 `certreq` 最靠谱,不需要装任何东西。我先生成配置文件:
已生成配置文件 `iis-lan-cert.inf`(在当前工作区)。**先把里面的 IP 和机器名改成你的实际值**(`dns=srv01.local`、`ipaddress=192.168.1.100` 两处),然后把它拷到 IIS 服务器上,以**管理员身份**打开 cmd/PowerShell 依次执行:
```powershell
# 1. 生成并自动安装证书到本机证书库("个人"存储)
certreq -new iis-lan-cert.inf iis-lan-cert.cer
# 2. 把 .cer 装入密钥关联(certreq -new + RequestType=Cert 会自动完成,此步一般可跳过)
# 如果 IIS 证书列表里看不到,再手动执行:
certreq -accept iis-lan-cert.cer
```
然后:
1. **IIS 绑定**:IIS 管理器 → 站点 → 绑定 → HTTPS → 选择新证书(名称就是 `CN=srv01.local`),保存。
2. **客户端导入**:在每台要访问的电脑上,把这张 `iis-lan-cert.cer` 导入“受信任的根证书颁发机构”(本地计算机),或用命令 `certutil -addstore -f ROOT iis-lan-cert.cer`,重启 Chrome 后访问 `https://192.168.1.100` 就没有警告了。
几个注意点:
- `MachineKeySet = TRUE` 很关键,保证证书出现在 IIS 的证书选择列表里
- `Subject = "CN=srv01.local"` 也建议改成你的实际机器名,虽然匹配主要看 SAN
- 如果客户端用机器名访问而不是 IP,确保 `dns=` 条目里包含该名字
- 证书有效期默认由系统策略决定(一般 1~2 年),到期后重新跑一遍同样的命令即可
如果 certreq 路线嫌麻烦,备选方案是用 OpenSSL 签一张(需要装 OpenSSL),但 certreq 是 Windows 原生的,优先用它。
浙公网安备 33010602011771号