110,533
社区成员
发帖
与我相关
我的任务
分享
public void startServer()
{
server = new TcpListener(ep);//ep是一个IPAndPoint
server.Start();
while(true)
{
TcpClient appClient = null;
try
{
appClient = server.AcceptTcpClient();
}
catch
{
break; //底层出现异常
}
Console.WriteLine("接收新连接:" + appClient.Client.RemoteEndPoint);
if (appClient.Connected)
{
Thread thread = new Thread(new ParameterizedThreadStart(poccessClient));
thread.Start(appClient);
}
}
}
private void poccessClient(Object client)
{
TcpClient appClient = (TcpClient)client;
NetworkStream stream = appClient.GetStream();
SslStream ssl = new SslStream(stream,false);
StringBuilder acceptChar=new StringBuilder();
int byt = -1;
try
{
ssl.AuthenticateAsServer(getCert(),false,SslProtocols.Tls,false);//异常出现在这一行
ssl.ReadTimeout = 5000;
ssl.WriteTimeout=5000;
do
{
byt = ssl.Read(bytes,0,bytes.Length);
acceptChar.Append(Encoding.UTF8.GetString(bytes,0,bytes.Length));
if(acceptChar.ToString().IndexOf("<EOF>")!=-1)
{
break;
}
}while(byt!=0);
Console.WriteLine(acceptChar.ToString())
ssl.Write(Encoding.UTF8.GetBytes("0"));
ssl.Flush();
}
catch (AuthenticationException ex)
{
Console.WriteLine("证书验证错误");
Console.WriteLine(ex.StackTrace+"\n"+ex.Message);
}
finally
{
Console.ReadKey();
appClient.Close();
stream.Close();
}
}
private X509Certificate2 getCert()
{
try
{
X509Certificate2 x509 = new X509Certificate2(@"E:\cert.pfx", "123456", X509KeyStorageFlags.Exportable);
//Console.WriteLine(x509.GetSerialNumberString());
//Console.WriteLine(x509.SerialNumber);
return x509;
}
catch (CryptographicException)
{ throw; }
}
TcpClient client = new TcpClient();
client.Connect(IPAddress.Parse(txtIP.Text), Int32.Parse(txtPort.Text));//ipaddress port
NetworkStream stream = client.GetStream();
SslStream ssl = new SslStream(stream, false, new RemoteCertificateValidationCallback(ValidateServerCertificate), null);
try
{
X509Certificate2Collection collection = new X509Certificate2Collection();
ssl.AuthenticateAsClient("CertName", collection, SslProtocols.Tls, false);
//ssl.AuthenticateAsClient("CertName");
}
catch (AuthenticationException ex)
{
Console.WriteLine("Exception: {0}", ex.Message);
if (ex.InnerException != null)
{
Console.WriteLine("Inner exception: {0}", ex.InnerException.Message);
}
Console.WriteLine("Authentication failed - closing the connection.");
client.Close();
return;
}