我用VS命令行工具执行makecert创建了一个证书,然后创建了两个winform,一个做服务端一个做客户端,可以互相通讯,然后我把服务端的源码放到一个Windows服务中,在系统中安装该服务,在用那个客户端访问监听的端口,此时出现错误
客户端显示的信息是由于远程方已关闭传输流,身份验证失败。当调试Windows服务时,服务捕获到异常信息,信息内容为:服务器模式 SSL 必须使用具有关联私钥的证书。
有人知道什么原因吗?怎么解决
远程方已关闭传输流,身份验证失败. 服务器模式 SSL 必须使用具有关联私钥的证书.
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- 行货优盘 2016-12-01 08:07关注
附源码
服务器端源码如下:
///
/// 执行服务器监听
///
public static void RunServer()
{
// 建立X509凭证
ServerCertificate = new X509Certificate(Certificate, "123456");
// 监听任何IP Address来的讯息
listener = new TcpListener(System.Net.IPAddress.Any, 17170);
// 开启监听
listener.Start();while (IsRun) { TcpClient client = listener.AcceptTcpClient(); if (!IsRun) { listener.Stop(); client.Close(); } else { ProcessClient(client); } } } /// <summary> /// 接收客户端讯息处理并回复 /// </summary> /// <param name="pClient"></param> private static void ProcessClient(TcpClient pClient) { SslStream sslStream = new SslStream(pClient.GetStream(), true); try { sslStream.AuthenticateAsServer(ServerCertificate, true, SslProtocols.Tls, true); sslStream.ReadTimeout = 5000; sslStream.WriteTimeout = 5000; string messageData = ReadMessage(sslStream); byte[] message = Encoding.UTF8.GetBytes(string.Format("服务器已接收此: {0} 讯息<EOF>", messageData)); sslStream.Write(message); } catch (Exception e) { sslStream.Close(); pClient.Close(); return; } finally { sslStream.Close(); pClient.Close(); } }
解决 无用评论 打赏 举报