IIS作为客户端连接SoapUi出现Handshake Failure (40)故障如何配置?
核心配置检查项
1. 授予IIS应用池运行身份客户端证书私钥读取权限
这是该场景下最高发的问题:即使证书已经存入LocalMachine存储,IIS应用池的默认运行身份(如ApplicationPoolIdentity、NETWORK SERVICE)没有该证书的私钥读取权限,会导致程序加载到证书但无法调用私钥完成客户端身份签名,直接终止握手。
操作步骤:
- 按下Win+R输入
certlm.msc打开本地计算机证书管理器 - 找到你部署的客户端证书,右键选择「所有任务」-「管理私钥」
- 点击「添加」,输入你站点对应的应用池名称,格式为
IIS AppPool\你的应用池名,点击检查名称确认无误后添加 - 给该身份仅授予「读取」权限,保存即可
2. 校验证书的增强密钥用法(EKU)合规性
Windows的SSL/TLS栈默认会校验证书用途:
- IIS端使用的客户端证书必须包含客户端身份验证的增强密钥用法(OID:1.3.6.1.5.5.7.3.2)
- SoapUI端的服务端证书必须包含服务器身份验证的增强密钥用法(OID:1.3.6.1.5.5.7.3.1)
如果证书缺失对应EKU,即使CA相同也会被Windows拒绝用于握手。
3. 检查托管代码的TLS配置与证书校验规则
如果你的应用是.NET Framework/.NET Core开发,需要确认以下配置:
- 确保代码中指定的TLS协议版本与SoapUI端一致,建议统一指定为TLS1.2及以上,示例配置:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; - 如果是测试环境没有配置CRL吊销服务,需要关闭证书吊销校验,可在web.config中添加配置:
<system.net> <settings> <servicePointManager checkCertificateRevocationList="false" /> </settings> </system.net> - 若证书的CN与访问的域名/主机名不匹配,可按需临时关闭证书名称校验(仅测试环境使用,生产环境不建议)。
4. 确认CA证书部署位置正确
必须确保签发证书的根CA证书、中间CA证书都存入本地计算机的「受信任的根证书颁发机构」存储,不要存入当前用户的存储路径,否则IIS应用池身份无法读取到根CA证书,会判定服务端证书不可信。
内容的提问来源于stack exchange,提问作者FluffyBike
相关产品推荐
相关产品推荐

