我有一个.NET C#应用程序,它使用双向SSL(客户端证书)连接到远程soap Web服务进行身份验证。该应用程序在Windows Server 2008 R2系统上的IIS 7.5上运行。已安装Internet Explorer 11。
由于我们的IT部门设置了以下注册表项,因此远程服务器返回错误,指出我们的客户端未提供证书。 HKEY_LOCAL_MACHINE \ SOFTWARE \微软\ .NETFramework \ v4.0.30319 " SchUseStrongCrypto" = DWORD:00000001
IE具有相同的问题,直到我在进度属性中禁用TLSv1.2。 Firefox和Chrome都可以使用。
套件的远程服务器首选顺序配置如下: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256(0xc027) TLS_RSA_WITH_AES_128_GCM_SHA256(0x9c) TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384(0xc030) TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384(0xc028) TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA(0xc014)
我做了一个wireshark跟踪,看看浏览器和.NET应用程序与服务器协商的密码套件。它看起来像.NET应用程序和IE与TLSv1.2激活协商TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,而firefox和chrome协商TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384。
有没有人知道为什么双向ssl握手与套件firefox和chrome一起使用但不适用于套件IE和.Net应用程序使用。
这可能是远程服务器配置上的问题,还是更有可能是Windows / .Net Framework问题?
为什么IE和.Net Framework不尊重服务器首选顺序?
非常感谢你。
-Willey
答案 0 :(得分:0)
根据您的描述,我猜测在TLS 1.2握手期间存在问题。可能的原因可能是证书链中至少有一个证书使用Md5作为其哈希算法。
如果是这种情况,您需要使用接受的散列算法将该证书交换为另一个证书。
请查看以下链接以获取进一步说明: