身份验证失败,因为远程方已关闭传输流

时间:2014-04-28 11:17:29

标签: c# ssl authentication

这发生在sslStream.AuthenticateAsServer(serverCertificate, true, SslProtocols.Default, true); 调用

我正在尝试进行客户端身份验证。我控制客户端和服务器,两者都是通过sslstream的c#。 当我使用nodejs服务器时,它完美地工作。但由于某些原因,我无法让服务器端可靠地在c#中工作。显然,ssl身份验证需要等待客户端选择客户端证书,但显然这不是c#sslstream类的内置功能? 我在调用之前已经尝试过这样做了,但它仍然立即在通话中出错:

enter image description here

我不介意IE中的安全问题。没关系。我关注的是sslstream在这样一个基本的szenario中似乎根本不起作用的事实。

来自wcf trace的错误:

  

System.Net错误:0:[7928] AppDomain中的异常#13869071 :: UnhandledExceptionHandler - 身份验证失败,因为远程方已关闭传输流。      在System.Net.Security.SslState.ValidateCreateContext(布尔isServer,字符串targetHost,SslProtocols enabledSslProtocols,X509证书serverCertificate,X509CertificateCollection clientCertificates,布尔remoteCertRequired,布尔checkCertRevocationStatus,布尔checkCertName)      在System.Net.Security.SslStream.AuthenticateAsServer(X509Certificate serverCertificate,Boolean clientCertificateRequired,SslProtocols enabledSslProtocols,Boolean checkCertificateRevocation)

1 个答案:

答案 0 :(得分:2)

添加以下代码帮助我克服了这个问题(我在.NET 4.5.1中运行应用程序)。

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11;