問題タブ [sslstream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
293 参照

.net - データは読み取り後に SslStream に残ります

安全な通信のために.netのSslStreamを使用するピアツーピアソフトウェアを開発しています。

BeginRead() と EndRead() を使用して、ストリームからデータを非同期的に読み取ります。(奇妙なコールバックメソッドはあまり気にしないでください..それは私が今作業しなければならないフレームワークからのものです)

クライアントは受信したデータを処理し、再度読み取りを開始します。リモート クライアントがまだ新しいデータを送信していない場合、受信クライアントは古いデータを再度読み取ります。そのため、データは読み取られた後も SslStream に残ります。

このデータを既に読んだことをクライアントに伝える方法はありますか?

0 投票する
1 に答える
462 参照

c# - 暗号化されたペイロードの前に暗号化されていないフレーミング ヘッダーを追加する方法 (Sslstream を使用)

C# と .NET Framework 4.5 を使用してICE-TCP (RFC 6544 https://www.rfc-editor.org/rfc/rfc6544 ) を実装するのに忙しいです。ただし、次のようなプロトコルレイヤリングに関連する非常に難しい問題に直面しています。

ICE-TCP RFC は次のように述べています。

「ICE では、エージェントが STUN とアプリケーション層のトラフィックを逆多重化する必要があります。これらは同じポートに現れるからです。この逆多重化は [RFC5245] で説明されており、メッセージのマジック クッキーやその他のフィールドを使用して行われます。
ストリーム指向トランスポートは、STUN パケットをアプリケーション層トラフィックから区別するために、アプリケーションと STUN パケットを抽出できるように接続をフレーム化する方法を必要とするため、別の問題をもたらします。
このため、ICE を利用する TCP メディア ストリームは、アプリケーション層プロトコルが RTP でなくても、 RFC 4571 ( https://www.rfc-editor.org/rfc/rfc4571#section-2 ) で提供される基本的なフレーミングを使用します。 </p>

フレーミング方法は次のようになります。

また、実装で TLS を使用したいのですが、ICE-TCP RFC には次のように書かれています。

Transport Layer Security (TLS) または Datagram Transport Layer Security (DTLS) が使用される場合、それらは RFC 4571 フレーミング シム上でも実行されますが、STUN は (D)TLS 接続の外部で実行されます。結果の ICE TCP プロトコル スタックを図 1 に示します。左側に (D)TLS があり、右側に (D)TLS がありません。」</p>

最後に、ICE TCP スタックは次のようになります。

だから私は図の左側に興味があります。この図は、フレーミング ヘッダーが TLS 暗号化の範囲外にあり、暗号化されていないヘッダーをストリームに書き込む必要があることを示しています。

現在、私のアプリケーションは、TCPClient から取得した NetworkStream をラップした SslStream クラスを使用しています。私の最初の意図は、フレーミング ヘッダーを NetworkStream に書き込み、その後、暗号化されたアプリケーション データを SslStream に書き込むことでした。いくつかの調査の後、私はこれを見つけました:

「AuthenticateAsClient/Server の後、接続は SSL で保護されます。その場合、Socket または NetworkStream メソッドを呼び出さないでください。これにより、SslStream が壊れます。」出典: C# Sockets and SslStreams

そのため、SSL 接続が確立されると NetworkStream に書き込むことができません。

私の質問は、TCP (NetworkStream) と TLS (SslStream) の間にヘッダーを「配置」する方法はありますか?

前もって感謝します。

よろしくお願いします

マーカス

0 投票する
1 に答える
991 参照

c# - C# SslStream 読み取りの問題

アプリをテストするサーバーとして SslStream を使用していますが、ストリームからの読み取りに問題があります。私は次のコードを使用しています:

問題は、最初のループが返されることです。

2 回目の実行では次の値が返されます。

結果は

問題は何ですか? SslStream から読み取るためのより良い方法はありますか?

0 投票する
1 に答える
1216 参照

c# - 長さがわからない場合にSSLStreamから読み取る方法は?

SSLStreamを使用してアプリをテストしようとしていますが、これまでのところうまくいきます(クライアント/サーバー認証は成功しています)が、私が抱えている問題は次のとおりです。

最後に到達したかどうかを知る方法は?

「EOF」を使用した Microsoft の例は単純に機能せず、「\r\n\r」比較を試みましたが、応答が長いと切れてしまい、情報の一部しか取得できません。ストリーム自体の長さを知らずに、このストリームから読み取るにはどうすればよいですか?

また、ストリームの最後の位置を、最後のループの最後の位置を保持する変数と比較しようとしましたが、これも機能しません (読み取りを試みても、最後に到達すると IOException が発生します)。

0 投票する
1 に答える
342 参照

c# - TCP 接続を持つユーザーを識別する

C# と TCP を使用する場合、クライアントがユーザー名とパスワードを使用して自分自身を識別し、サーバーからクライアントへ、およびクライアントからサーバーへ、ユーザー名とパスワードをそれぞれ送信せずに複数のパケットを送信できるようにする最善の方法は何ですか?時間?各ユーザーのスレッド?各パケットで送信されるトークン?

また、サーバーが送信しているデータをクライアントだけが読み取れるようにする方法と、その逆の方法は? SSLStreamを使用しているだけですか?

0 投票する
1 に答える
1812 参照

c# - SslStream から読み取る

次のように SslStream から読み取っています。

ストリームから読み取ります。ただし、ストリームの実際の長さは不明であるため、最後の読み取りでアプリがフリーズするだけです。サンプル メッセージは次のようになります。

サーバーはコンテンツの長さを返しますが、ストリーム全体の長さではありません。このストリームを正常に読み取る効率的な方法はありますか?

0 投票する
1 に答える
1941 参照

c# - タイムアウト: BeginAuthenticateAsClient と AuthenticateAsClient の比較

サーバーへの安全な接続を確立しようとする .NET サービスを開発しています。サービスは、サーバーが安全な接続をサポートしているかどうかを事前に知りません。そのため、私は単に安全な接続を確立しようとし、それが失敗した場合は安全でない接続にフォールバックします.

私はTcpClient一緒に使用していSslStreamます:

サーバーが要求された暗号化をサポートしていない場合、コールバック メソッドが呼び出されるまでに 2 分かかります。代わりに同期メソッドを使用するとAuthenticateAsClient()、予想される 2 秒しかかかりません ( を設定することで要求されますReadTimeout)。

タイムアウトが同期メソッドにのみ適用されるのはなぜですか? 非同期メソッドのコールバック時間を短縮するにはどうすればよいですか? または、サーバーが安全な接続をサポートしているかどうかを確認するためのより良い方法はありますか?