Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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
C# 套接字和身份验证失败,因为远程方已关闭WPF中的传输流异常_C#_Sockets_Ssl - Fatal编程技术网

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

C# 套接字和身份验证失败,因为远程方已关闭WPF中的传输流异常,c#,sockets,ssl,C#,Sockets,Ssl,我正在尝试连接基于JavaNetty的服务器,它会自动为自己生成证书(服务器人员告诉我,现在它接受来自客户端的任何证书) 我的任务是将TcpSocket连接迁移到Tls加密连接 首先,我将TcpSocket转换为NetworkStream: using (var client = new NetworkStream(connection.TcpSocket)) { if (client.CanRead) { client.BeginRead(recvState.D

我正在尝试连接基于JavaNetty的服务器,它会自动为自己生成证书(服务器人员告诉我,现在它接受来自客户端的任何证书)

我的任务是将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:身份验证失败,因为远程方 已关闭传输流异常

另外,如果AuthenticateTascClient方法中的主机名有什么意义,服务器是否接受每个证书?我应该放些重要的东西吗

我仍然可以与服务器人员联系,这样我就可以问他们所有的事情——我们需要任何额外的信息吗?

开始工作了

托管套接字服务器的服务器必须在其证书存储上安装带有私钥的证书。如果安装时没有它(只有证书或公钥),则会出现身份验证失败的错误


希望能有帮助。

你修好了吗?我在这里也有同样的情况。谢谢你。仍在等待帮助。我将把这个答案传递给我们的服务器团队。非常感谢。我的应用程序发送邮件8到10个小时,然后抛出这样的异常“身份验证失败,因为远程方关闭了传输流”。如何处理这种情况?求求你帮帮我,伙计,你刚刚用这篇文章救了我的命。非常感谢你!如果可以的话,我现在会给你我所有的名誉积分!英雄联盟