我想编写一个客户端和服务器应用程序,使用TCP套接字进行通信。然而,由于用户不关心对方是谁,因此我不需要证书。但是,我需要非对称加密,以防止任何人窥探。我无法想到在不使用RSA的情况下共享对称密钥的方法,但无论如何,我认为我应该使用TCP的SSL?
在C#中创建SSL/TCP连接的最简单方法是什么?我想要指定没有证书或动态创建一个(但它们应该是一次性的...)。实现它的最简单方法是什么?我尝试将sslstream添加到我的tcp流中,但这样做不起作用(我得到“流不可读”错误)。以下是我的简单代码:
在C#中创建SSL/TCP连接的最简单方法是什么?我想要指定没有证书或动态创建一个(但它们应该是一次性的...)。实现它的最简单方法是什么?我尝试将sslstream添加到我的tcp流中,但这样做不起作用(我得到“流不可读”错误)。以下是我的简单代码:
{
Thread serverThread = new Thread((ThreadStart)delegate
{
TcpListener listener = new TcpListener(1234);
listener.Start();
using (TcpClient client = listener.AcceptTcpClient())
//using (var sslstream = client.GetStream())
using (var sslstream = new System.Net.Security.SslStream(client.GetStream(), true))
using (StreamReader reader = new StreamReader(sslstream))
using (StreamWriter writer = new StreamWriter(sslstream))
{
writer.AutoFlush = true;
string inputLine;
while ((inputLine = reader.ReadLine()) != null)
{
writer.WriteLine(inputLine);
}
}
});
serverThread.Start();
{
string[] linesToSend = new string[] { "foo", "bar", "ack" };
using (TcpClient client = new TcpClient("127.0.0.1", 1234))
//using (var sslstream = client.GetStream())
using (var sslstream = new System.Net.Security.SslStream(client.GetStream(), true))
using (StreamReader reader = new StreamReader(sslstream))
using (StreamWriter writer = new StreamWriter(sslstream))
{
writer.AutoFlush = true;
foreach (string lineToSend in linesToSend)
{
Console.WriteLine("Sending to server: {0}", lineToSend);
writer.WriteLine(lineToSend);
string lineWeRead = reader.ReadLine();
Console.WriteLine("Received from server: {0}", lineWeRead);
//Thread.Sleep(2000); // just for effect
}
Console.WriteLine("Client is disconnecting from server");
}
}
serverThread.Join();
}