私はC#開発の新機能です。私はssl/tlsをtcpよりも使用しようとしていますが、コードでは、tcpclientまたはtcplistnerではなく、system.net.sockets.socket(bare socket)が使用されています。私はネット200以上のリンクを検索したが、関連するものは何も得られなかった。私はより少ないコーディングを使用して、sslまたはtsllをtcpソケット接続よりも使いたい。私はクライアント、サーバー、CA証明書、キーを.key形式で持っています。例やリンクでお手伝いください。あなたが詳細を感じたら質問をすることができます。C#ssl/tls with socket tcp
答えて
System.Net.Sockets.NetworkStream
を使用してソケットをラップし、次にSystem.Net.Security.SslStream
を使用してネットワークストリームをラップすることができます。
Socket socket;
Stream networkStream = new NetworkStream(socket);
Stream sslStream = new SslStream(networkStream);
なぜあなたは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つの解決策がすべてに合っているかどうかはわかりませんので、ここでいくつかリストします。多分あなたが利用することができ、いくつかの既存のライブラリがあります
- 。私はNitro/Asyncを使用しましたが、2009年以降に更新されたとは思われません。バージョン2の話がありましたが、それが実現したとは考えていません。
- 私はそれに慣れていないんだけどCodeProjectのはC# SocketAsyncEventArgs High Performance Socket Code
- レビューマイクロソフトの指導、スティーブンToubが、私は特にSSLを扱うが、見ていないAwaiting Socket Operations
含めて言っているHigh Performance .NET Socket Server Using Async Winsock
SslStream
クラスに追加します。 また、バッファプールについて調べることもできます。何千ものクライアントにサービスを提供している場合、ガベージコレクションが問題になります。これに優れた導入は、前Sunny Ahuwanya's Blog
http://nitoasync.codeplex.com/
です。
この回答には多大な努力を払っていますが、悲しいことに、これはまったく答えません。 –
- 1. udp socket with C++ and windows API
- 2. Socket Io with Android
- 3. boost :: asio :: ip :: tcp :: socket :: cancelとsocket :: closeの違い
- 4. boost :: asio :: ip :: tcp :: socket :: cancel()とsocket :: close()を使用する
- 5. C#tcp socketクライアントサーバーで複数のファイルを転送する問題
- 6. Perl TCP socket progammingに関する質問
- 7. C#TCPサーバーバッファー
- 8. C/Linux TCPソケットサーバー
- 9. Cant with tcp over cloud_sql_proxy
- 10. C#socket program auto close
- 11. C++ asio socket read答えサーバー
- 12. C#tcpソケットキープアライブ
- 13. C++ boost tcp-server
- 14. C#ソケット(TCPとUDP)
- 15. Winsock C TCPソケット
- 16. ProtobuferからC++からC#over Socket
- 17. Python/C++リモートTCPソケット
- 18. TCP/IPファイル転送C++
- 19. boost :: asio :: ip :: tcp :: socketが接続されていますか?
- 20. asio :: ip :: tcp :: socketからstd :: stringに直接書き込む
- 21. ExpressをNode.jsのtcp-socketと組み合わせる方法
- 22. boost :: asio :: ip :: tcp :: socket - 特定のローカルポートにバインドする方法
- 23. Boost :: ASIO:複数のスレッドでtcp :: socketを使用する
- 24. 目的C TCPソケット
- 25. C#TCPチャットアプリケーションスレッディング
- 26. C#ソケットTCPクライアント/サービス
- 27. TCPソケットサーバーC++/cウィンドウサイズ
- 28. boost :: asio :: ssl :: stream <boost :: asio :: ip :: tcp :: socket>をboost :: asio :: ip :: tcp :: socket型の引数として受け入れる方法
- 29. Cサーバコード - JavaクライアントコードTCP接続問題
- 30. CクライアントのTCPサーバとjava通信
この回答は十分に簡単です。ちょうど1つの疑問:このようなソケットをラップした後は、socket.send()を使用すべきではなく、全体を通してsslStreamを使用するべきですか? Begin/Endを使って送受信を行うAsyncソケットを使ったプロジェクトが既にあるので、うまくいきます。 Use SSLはアプリケーションのオプションとしてのみ計画されているため、実装するためにはどれだけの変更が必要かを把握しようとしています。どんな助けもありがとう。事前に多くの感謝。 –