如何解决为什么使用.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 举报,一经查实,本站将立刻删除。