Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 即使客户端未在请求中发送签名算法,也让服务器使用SHA256_.net_Ssl_Tls1.2_Windows Server 2012 R2_Sha256 - Fatal编程技术网

.net 即使客户端未在请求中发送签名算法,也让服务器使用SHA256

.net 即使客户端未在请求中发送签名算法,也让服务器使用SHA256,.net,ssl,tls1.2,windows-server-2012-r2,sha256,.net,Ssl,Tls1.2,Windows Server 2012 R2,Sha256,我正在使用一个.net应用程序,其中客户端使用TCP SSL流连接到我们的服务器。应用程序正在使用.net 4.5,并作为windows server 2012 R2中的windows服务运行 我们正在使用SHA256证书,客户端无法与严格的TLS 1.2进行协商。“客户端和服务器无法通信,因为它们没有共同的算法-SSLStream” 感谢您的回答,帮助我进一步排除故障 当我们使用SHA1证书时,客户端能够成功地与TLS1.2进行协商 来自RFC 如果客户端不发送签名算法扩展,则 服务器必须执行

我正在使用一个.net应用程序,其中客户端使用TCP SSL流连接到我们的服务器。应用程序正在使用.net 4.5,并作为windows server 2012 R2中的windows服务运行

我们正在使用SHA256证书,客户端无法与严格的TLS 1.2进行协商。“客户端和服务器无法通信,因为它们没有共同的算法-SSLStream”

感谢您的回答,帮助我进一步排除故障

当我们使用SHA1证书时,客户端能够成功地与TLS1.2进行协商

来自RFC

如果客户端不发送签名算法扩展,则 服务器必须执行以下操作:

如果协商密钥交换算法是(RSA,DHE_RSA, DH_RSA、RSA_PSK、ECDH_RSA、ECDHE_RSA)的行为就像客户端发送了 值{sha1,rsa}

我的客户机支持SHA256,但他们没有将签名算法作为TLS 1.2请求的一部分发送,默认情况下,服务器与SHA1而不是SHA256进行协商

SHA256,SHA1 works fine with TLS 1.0
SHA1 works with strict TLS 1.2
SHA256 not working with strict TLS 1.2

因此,我的问题是,即使我的客户端不发送签名算法,我是否也可以让服务器使用SHA256进行协商?

我怀疑“如何使.NET主动违反规范”的答案是“你不能,这是出于设计”。协商的全部要点是,客户机和服务器必须就其支持的内容达成一致——如果客户机支持某些内容,但拒绝表明这一点,那么服务器将无能为力。您如何知道客户机支持SHA-256,而客户机没有指出它?如果这是供应商给你的信息,也许他们也能告诉你如何使其遵守标准吗?@Jeroenmoster完全同意。但我只是想让你们知道这个观点,知道是否有可能在SSLstream类中指定HashAlgorithm,或者我不知道的任何其他方式?我被告知他们在Linux中测试并使用SHA256,因此我感到困惑
SslStream
没有实现协商本身;它委托给操作系统库(Windows上的Schannel)。如果有任何方法可以对其进行调整,它就会出现,但我不确定是否有任何配置允许这种特定的标准冲突。如果你想试试运气,你可以在Linux上的.NET内核上运行你的.NET代码,它将在Linux上使用OpenSSL。谁知道呢,如果他们说他们已经在Linux上测试过,那可能是开箱即用的。@Jeroenmoster我试图在windows中创建一个openssl服务器(openssl s_服务器-tls1_2),而客户端能够使用TLS 1.2进行通信。只有我的ssl流无法验证它。我使用了与这里类似的示例,并且Windows上的OpenSSL服务器不委托给Schannel;它自己执行谈判。但是您不能让.NET Framework的
SslStream
使用OpenSSL,而且它也无法自定义算法协商(据我所知)。您可以使用OpenSSL或其他支持所需设置的库,在Windows服务器前运行HAProxy(或类似的),并让该代理使用普通的旧HTTP与您的服务通信。这是假设您的服务器不关心HTTPS本身,并且您不介意维护Linux服务器(虚拟或其他)。
SHA256,SHA1 works fine with TLS 1.0
SHA1 works with strict TLS 1.2
SHA256 not working with strict TLS 1.2