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

4

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

我想进行客户端验证。我控制客户端和服务器,它们都是使用c#通过sslstream实现的。当我使用nodejs服务器时,它完美地工作。但由于某种原因,我无法可靠地让c# 服务器端正常工作。显然,SSL身份验证需要等待客户端选择客户端证书,但显然c# sslstream类中没有内置此功能?我已经尝试在调用之前执行此操作,但它仍然立即报告错误:

enter image description here

我不介意IE中的安全问题。那没关系。我担心的是sslstream似乎根本无法处理这样一个基本场景。

wcf跟踪产生的错误:

System.Net Error: 0 : [7928] Exception in AppDomain #13869071::UnhandledExceptionHandler - Authentication failed because the remote party has closed the transport stream.. at System.Net.Security.SslState.ValidateCreateContext(Boolean isServer, String targetHost, SslProtocols enabledSslProtocols, X509Certificate serverCertificate, X509CertificateCollection clientCertificates, Boolean remoteCertRequired, Boolean checkCertRevocationStatus, Boolean checkCertName) at System.Net.Security.SslStream.AuthenticateAsServer(X509Certificate serverCertificate, Boolean clientCertificateRequired, SslProtocols enabledSslProtocols, Boolean checkCertificateRevocation)


可能是因为这个原因,不确定如何解决:撤销功能无法检查证书的吊销情况。 - Blub
好的,就这样了,我已经禁用了CLR检查。 - Blub
哎呀,IE在我的服务器端仍然会导致这个问题。我添加了WCF跟踪。 - Blub
好的,显然这是在任何身份验证错误时抛出的错误。 - Blub
1个回答

3

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

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11;

对我来说是Tls12,仍然是个好答案。 - CodingBarfield

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接