私はC#開発の初心者です。私はtcpではなくssl/tlsを使用しようとしていますが、私のコードでは、system.net.sockets.socket(裸のソケット)がtcpclientまたはtcplistnerではなく使用されています。私はネット上で少なくとも200のリンクを検索しましたが、それに関連するものは何もありませんでした。使用するコーディングを減らし、TCPソケット接続でsslまたはtsllを実行したいと思います。クライアント、サーバー、CA証明書、.key形式のキーがあります。例やリンクを手伝ってください。詳細を感じたら質問できます。
TcpClient
を使用したくないのですか? TcpClient
およびSsltream
を使用してSSL接続を作成するのは非常に簡単です。何千もの同時接続が必要でない限り、私はTcpClient
とSSLStream
を使い続けます。
基本的なTcpClient
およびSslStream
の例は次のようになります。
static void Main(string[] args)
{
string server = "127.0.0.1";
TcpClient client = new TcpClient(server, 443);
using (SslStream sslStream = new SslStream(client.GetStream(), false,
new RemoteCertificateValidationCallback(ValidateServerCertificate), null))
{
sslStream.AuthenticateAsClient(server);
// This is where you read and send data
}
client.Close();
}
public static bool ValidateServerCertificate(object sender, X509Certificate certificate,
X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true;
}
高性能のソケットコードは.NETで書くのが難しい場合がありますが、良い例があります。選択肢はたくさんあります。 1つのソリューションがすべてに当てはまるかどうかはわからないので、ここにいくつか挙げます。
SSLについては特に触れていませんが、SslStream
クラスを調べています。
また、バッファプーリングを調べる必要があります。何千ものクライアントにサービスを提供している場合、ガベージコレクションが問題になります。これの優れた紹介は Sunny Ahuwanyaのブログ です。
https://github.com/StephenCleary/AsyncEx
前。
System.Net.Sockets.NetworkStream
ソケットをラップして System.Net.Security.SslStream
ネットワークストリームをラップします。
Socket socket;
Stream networkStream = new NetworkStream(socket);
Stream sslStream = new SslStream(networkStream);