套接字和身份验证失败,因为远程方已关闭 WPF 中的传输流异常

Socket and Authentication failed because the remote party has closed the transport stream exception in WPF

我正在尝试连接基于 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

问题是 AuthenticateAsClient 抛出

System.IO.IOException: Authentication failed because the remote party has closed the transport stream exception.

此外,如果 AuthenticateAsCtlient 方法中的主机名意味着什么,如果服务器接受每个证书?我应该放一些重要的东西吗?

我仍然可以联系服务器人员,所以我可以向他们询问所有事情 - 我们需要任何其他信息吗?

成功了。

托管套接字服务器的服务器必须已经在其证书存储上安装了带有私钥的证书。如果你在没有它的情况下安装它(只是证书或只是 public 密钥)你将得到那些身份验证失败的错误。

希望对您有所帮助。