为本地网络IIS创建HTTPS证书遇浏览器不兼容问题求助
解决方法:在OpenSSL证书生成流程中添加SAN字段
现代浏览器强制要求HTTPS证书包含**Subject Alternative Name(SAN)**字段,即便CN(通用名称)匹配访问地址也无法绕过这个校验。以下是针对OpenSSL 3.2.0的具体修改步骤,适配IIS 10的证书需求:
1. 准备自定义OpenSSL配置文件(核心针对服务器证书)
创建一个名为server_san.cnf的配置文件,内容如下:
[req] default_bits = 2048 distinguished_name = req_distinguished_name req_extensions = req_ext prompt = no [req_distinguished_name] C = CN # 国家代码(如CN代表中国) ST = YourProvince # 替换为你的省份 L = YourCity # 替换为你的城市 O = YourOrganization # 替换为你的组织名称 OU = YourDepartment # 替换为你的部门名称 CN = win-d77pp2emm6s # 必须和访问地址的主机名完全一致 [req_ext] basicConstraints = CA:FALSE keyUsage = digitalSignature, keyEncipherment extendedKeyUsage = serverAuth subjectAltName = @alt_names [alt_names] DNS.1 = win-d77pp2emm6s # 服务器主机名(必填,和访问地址一致) DNS.2 = localhost # 可选,支持localhost访问 IP.1 = 192.168.x.x # 可选,支持服务器IP访问(替换为你的本地IP)
2. 修改批处理脚本中的服务器证书生成流程
假设你原有流程是「生成服务器私钥→生成CSR→中间CA签名」,现在修改为以下步骤:
2.1 生成服务器私钥
openssl genrsa -out server.key 2048
2.2 带SAN字段生成服务器CSR
openssl req -new -key server.key -out server.csr -config server_san.cnf
通过-config参数指定配置文件,自动读取SAN规则,无需手动输入任何信息。
2.3 用中间CA签名服务器证书(确保写入SAN扩展)
签名时必须显式指定扩展配置,否则证书不会包含SAN字段:
openssl x509 -req -in server.csr -CA intermediate.crt -CAkey intermediate.key -CAcreateserial -out server.crt -days 365 -extensions req_ext -extfile server_san.cnf
关键参数:-extensions req_ext和-extfile server_san.cnf,确保签名时将SAN等扩展写入最终证书。
3. 验证SAN字段是否成功添加
生成证书后,用以下命令检查:
openssl x509 -in server.crt -text -noout | findstr "Subject Alternative Name"
如果输出类似Subject Alternative Name: DNS:win-d77pp2emm6s, DNS:localhost, IP Address:192.168.x.x,说明SAN字段已正确写入。
4. 重新部署证书到IIS
- 删除原有服务器证书,将新证书打包成PFX格式(方便IIS导入):
openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt -certfile intermediate.crt -certfile root.crt - 在IIS管理器中导入PFX文件到服务器证书存储,重新绑定HTTPS站点并选择新证书。
5. 确认根CA证书已导入客户端信任存储
即便服务器端证书链显示正常,仍需确保根CA证书已安装到客户端浏览器的受信任根证书颁发机构目录,否则浏览器仍会提示证书不受信任。
内容的提问来源于stack exchange,提问作者Aidal
相关产品推荐
相关产品推荐

