我有一个.NET C#应用程序,该应用程序使用2-way SSL(客户端证书)进行身份验证,连接到远程soap Web服务。该应用程序在Windows Server 2008 R2系统上的IIS 7.5上运行。已安装Internet Explorer 11。
由于以下注册表项是由我们的IT部门设置的,因此远程服务器会返回一条错误消息,指出我们的客户端未提供证书。
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ .NETFramework \ v4.0.30319
“ SchUseStrongCrypto” = dword:00000001
直到我在Advances属性中禁用TLSv1.2之前,IE都有同样的问题。 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应用程序一样,还激活TLSv1.2的IE协商TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,而Firefox和Chrome协商TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384。
有谁知道为什么2向ssl握手可以与套件Firefox和chrome一起使用,却不能与套件IE和.Net应用程序一起使用。
这是远程服务器配置上的问题,还是Windows / .Net Framework问题?
为什么IE和.Net Framework不遵守服务器的首选顺序?
提前非常感谢您。
-威利
最佳答案
根据您的描述,我猜想在TLS 1.2握手期间存在问题。可能的原因可能是证书链中的至少一个证书使用Md5作为其哈希算法。
在这种情况下,您需要使用公认的哈希算法来交换另一个证书。
检查以下链接以获取更多说明:
https://blogs.msdn.microsoft.com/friis/2012/08/29/tls-1-2-handshake-failure/
https://community.qualys.com/thread/15498
关于c# - 客户端证书不是由.Net App使用TLS1.2发送的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44279882/