为什么使用.Net的TLS客户端身份验证第二次失败?

问题描述

我编写了一个简单的测试程序,该程序使用TLS证书与C ++服务器程序相互认证.Net客户端。它在第一次身份验证上运行良好,但是在关闭连接并创建新的相同连接后失败。套接字似乎已连接,但TLS握手失败。我已经尝试过使用带有ASIO的C ++客户端程序和相同的服务器并使用相同的证书,并且它可以多次正确身份验证,所以我认为服务器或证书没有问题,仅当使用.Net时才会出错码。我收到的异常是“收到的消息意外或格式错误。”代码如下所示。

    static void Main(string[] args)
    {
        try
        {
            for (int i = 0; i < 2; i++)
            {
                using (var client = new TcpClient("localhost",4444))
                {
                    SslStream SecureStream = new SslStream(client.GetStream());
                    X509Certificate2 clientCertificate = GetCertificateFromStore("Hydra Administrator");
                    X509CertificateCollection certificates = new X509CertificateCollection() { clientCertificate };
                    SecureStream.AuthenticateAsClient("localhost",certificates,false);
                    if (SecureStream.IsMutuallyAuthenticated)
                        Console.WriteLine("Mutually authenticated");
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }

我尝试使用网络监视器记录通过网络发送的消息。在第一个身份验证中,按预期从客户端问候开始,获得4条TLS握手消息,但是在第二个身份验证中,获得以下两个消息。

97 192.168.0.10 192.168.0.2 SSL SSL:SSLv2RecordLayer,客户端已完成(需要重新组装){SSL:18,SSLVersionSelector:17,TCP:12,IPv4:5}

98 192.168.0.2 192.168.0.10 TLS TLS:TLS Rec Layer-1加密警报{TLS:19,SSLVersionSelector:17,TCP:12,IPv4:5}

消息97是“客户端完成”消息,而不是“客户端问候”,其后是警报答复,此后重置连接。有人知道这是怎么回事吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)