TCPソケットを使用して通信するクライアントおよびサーバーアプリを作成したいと思います。ただし、ユーザーは他のユーザーが誰であるかを気にしないため、証明書は必要ありません。しかし、誰も詮索できないように、非対称暗号化が必要です。RSA を使用せずに対称キーを共有する方法は思いつきませんが、とにかく TCP で SSL を使用する必要があると思いますか?
C# で SSL/TCP 接続を作成する最も一般的な方法は何ですか? 私は、証明書を指定しないか、フライの1つを動的に作成するかのいずれかだと思います(ただし、それらは使い捨てにする必要があります...)。それを実装する最も簡単な方法は何ですか?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();
}