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

前端之家收集整理的这篇文章主要介绍了c# – 套接字和身份验证失败,因为远程方已关闭WPF中的传输流异常前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试连接基于 Java netty的服务器,它自动为自己生成证书(服务器人告诉我,现在接受来自客户端的任何证书).

我的任务是将TcpSocket连接迁移到Tls加密连接.

首先,我将TcpSocket转换为NetworkStream:

  1. using (var client = new NetworkStream(connection.TcpSocket))
  2. {
  3. if (client.CanRead)
  4. {
  5. client.BeginRead(recvState.DataBuffer,recvState.DataBuffer.Length,ReceiveCallback,recvState);
  6. }
  7. }@H_404_7@
  8. 这是完美的.那么,我决定构建SslAuthentication 就像这里:

  9. using (var client = new NetworkStream(connection.TcpSocket))
  10. using (var sslStream = new SslStream(client,false,App_CertificateValidation))
  11. {
  12.     var clientCertificate = new X509Certificate2("client.pfx");
  13.     var clientCertificateCollection = new X509Certificate2Collection(new[] { clientCertificate });
  14.     sslStream.AuthenticateAsClient("MyServer",clientCertificateCollection,SslProtocols.Tls,false);
  15.     if (sslStream.CanRead)
  16.     {
  17.         sslStream.BeginRead(recvState.DataBuffer,recvState);
  18.     }
  19. }@H_404_7@ 
  20.  

    其中client.pfx是没有密码的随机证书,作为项目中的文件,也导入到当前用户证书>个人> certmgr.msc中的证书.

  21.  

    问题是AuthenticateAsClient抛出一个

  22.   
  23.  
  24. System.IO.IOException: Authentication Failed because the remote party
    has closed the transport stream exception.

  25.  

    另外,如果AuthenticateAsCtlient方法中的主机名意味着什么,如果服务器接受每个证书?我应该把重点放在哪里吗?

  26.  

    我仍然可以联系服务器人员,所以我可以向他们询问一切 我们是否需要任何其他信息?

解决方法

搞定了.

托管套接字服务器的服务器必须在其认证存储上安装带有私钥的证书.如果您在没有它的情况下安装它(只是证书或只是公钥),您将获得身份验证失败的错误.

我希望它有所帮助.

猜你在找的C#相关文章