套接字和身份验证失败,因为远程方已关闭 WPF 中的传输流异常
本文关键字:WPF 异常 传输 失败 身份验证 因为 套接字 | 更新日期: 2023-09-27 18:36:48
我正在尝试连接基于 Java netty 的服务器,它会自动为自己生成证书(服务器人员告诉我,现在接受来自客户端的任何证书)。
我的任务是将TcpSocket连接迁移到TLS加密连接中。
首先,我将TcpSocket转换为NetworkStream:
using (var client = new NetworkStream(connection.TcpSocket))
{
if (client.CanRead)
{
client.BeginRead(recvState.DataBuffer, 0, recvState.DataBuffer.Length, ReceiveCallback,
recvState);
}
}
这很完美。因此,我决定构建 SslAuthentication - 如下所示:
using (var client = new NetworkStream(connection.TcpSocket))
using (var sslStream = new SslStream(client, false, App_CertificateValidation))
{
var clientCertificate = new X509Certificate2("client.pfx");
var clientCertificateCollection = new X509Certificate2Collection(new[] { clientCertificate });
sslStream.AuthenticateAsClient("MyServer", clientCertificateCollection, SslProtocols.Tls, false);
if (sslStream.CanRead)
{
sslStream.BeginRead(recvState.DataBuffer, 0, recvState.DataBuffer.Length, ReceiveCallback,
recvState);
}
}
其中client.pfx
是没有密码的随机证书,作为项目中的文件,也导入到certmgr.msc
中的Current User Certificates > Personal > Certificates
中。
问题是身份验证为客户端抛出一个
System.IO.IOException:身份验证失败,因为远程方 已关闭传输流异常。
另外,如果 AuthenticateAsCtlient 方法中的主机名意味着什么,如果服务器接受每个证书?我应该放一些重要的东西吗?
我仍然可以与服务器人员联系,所以我可以向他们询问所有事情 - 我们需要任何其他信息吗?
让它工作了。
托管套接字服务器的服务器必须在其证书存储上安装了带有私钥的证书。如果您在没有它的情况下安装它(只是证书或公钥),您将收到身份验证失败的错误。
我希望它有所帮助。