問題タブ [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.
c# - C#でクライアントによるサーバー認証用のサーバー名を特定するにはどうすればよいですか
最近、C# で SSL 暗号化サーバー/クライアントを作成しようとしています。
MSDN のこのチュートリアルに従いましたが、 makecert.exeを使用してサーバーとクライアントの使用のために証明書を作成する必要があったため、例を見つけて、証明書を正常に作成しました。
makecert -sr LocalMachine -ss My -n "CN=Test" -sky exchange -sk 123456 c:/Test.cer
しかし、問題は、サーバーが起動してクライアントを待機することです。クライアントが接続すると、収集できる限り、この場合は私のIPであるマシン名が使用されます。
127.0.0.1
、次に証明書のサーバー名と一致する必要があるサーバー名が必要です( Test.cer )。複数の組み合わせを試しました(「Test」「LocalMachine」、「127.0.0.1」など)が、指定されたサーバー名を一致させるクライアントを取得できないため、接続が許可されているようです。エラーは次のとおりです。
証明書エラー: RemoteCertificateNameMismatch、RemoteCertificateChainErrors 例外: 検証手順によるとリモート証明書が無効です
これは私が使用しているコードです。MSDN の例とは異なりますが、アプリでサーバーの証明書パスを割り当て、クライアントのマシン名とサーバー名も割り当てている点のみが異なります。
SslTcpServer.cs
SslTcpClient.cs
編集:
サーバーはクライアントの接続とすべてを受け入れますが、クライアントがメッセージを送信するのを待っている間にタイムアウトします。(証明書のサーバー名がクライアントで提供したものと異なるため、クライアントはサーバーで認証されません)まあ、明確にするためにそれについての私の考えです
アップデート:
回答によると、証明書メーカーを次のように変更しました。
makecert -sr LocalMachine -ss My -n "CN=localhost" -sky exchange -sk 123456 c:/Test.cer と私のクライアントでは:
今、私は例外を受け取ります:
RemoteCertificateChainErrors 例外: 検証手順によるとリモート証明書が無効です
ここで発生しています:
c# - SslStream.Read() の奇妙な動作
SslStream を使用していくつかのソケット レイヤーに取り組んでいます。参照
リファレンスを使用して、単純なクライアントを実装しました。厄介な部分は、アプリケーションを実行するときに、サーバーがクライアントに応答していないように見えることです。
デバッグ画面に入っていくつかのブレークポイントを設定すると、この関数が無限ループしていることに気付きました。
さらなる調査により、ここで本当の犯罪者が指摘されました。
どうやら、SslStream.Read()
戻っていないようです。デバッグ画面で確認すると、応答がtilbyte[] buffer
に書き込まれていることがわかります。関数はその仕事を終えましたが、まだ成功していませんか?!buffer
crlf
この理由は何でしょうか?この問題を無視するには、どのような手順を踏む必要がありますか?
また、懐疑的な人のために:openssl
サーバーが正常に動作しているかどうかを確認していましたが、サーバー側ではすべて問題ありません。
注:私はすでにSslStream.ReadTimeout
プロパティを認識しています。を発生させることでジョブをexception
実行しますが、すべてのシナリオで正しい答えとは限りません。特に、while ループとバッファーを使用してのみ効率的に読み取ることができる大量のデータ ストリームでサーバーが応答している場合はそうです。
c# - TCP/.NET SSLStream を介したファイルの送信が遅い/機能しない
SSL(over SSLStream
)で動作するサーバー/クライアントアプリケーションを作成しています。これは、ファイルの送受信だけでなく、多くのことを行う必要があります。現在、次のように動作します。接続は 1 つだけです。1 つの接続ですべての情報を送信でき、データを破壊することなくすべてのスレッドから送信できるため、
私は常に を使用してクライアント/サーバーからデータを送信し、SSLStream.WriteLine()
それを使用して受信します。SSLStream.ReadLine()
次に、ファイルの送受信を実装したいと思いました。クライアント/サーバー アプリの他のものと同様に、すべてのメッセージにはプレフィックス (cl_files や sth など) と base64 でエンコードされたコンテンツ部分 (プレフィックスとコンテンツは | で区切られています) があります。私はそのようにファイル共有を実装しました: アップローダは受信者にファイルの合計サイズに関するメッセージを送信し、その後、アップローダはファイルの base64 でエンコードされた部分を prefix 経由で送信しますr
。
私の問題は、ファイル共有が非常に遅いことです。localhost から localhost まで約 20KB/s を取得しました。私には別の問題もあります。ファイルのbase64でエンコードされた部分のサイズを大きくすると(ファイル共有が高速になります)、プレフィックスr
は受信者に送信されなくなります(そのため、データを識別できませんでした)。
どうすれば速くなりますか?
どんな助けでも大歓迎です。
私の(おそらく悪い)コードはクライアント用です:
サーバーの場合:
c# - 非同期 SSL ソケット
最近、非同期 ssl ソケット クラスを作成していました。私はそれを終了し、クライアントで正常に認証されましたが、クライアントから送信されたメッセージを正しく受信しませんでした。
これが私のコードです:
したがって、上記のコードで を呼び出しBeginRead
て使用しようとすると
Console.WriteLine(Encoding.ASCII.GetString(arg1));
、多くの空の行しか表示されません [MSDN の例の ssl クライアントを使用してサーバーをテストすることに注意してください]
メッセージが正しく受信されない理由を本当に知りたいです!
c# - 非同期SslStreamエラー
非同期SslStreamリスナーを作成しましたが、クライアントからメッセージを正しく受信しませんでした
リスナーコード
joran i don't want the code to be here anymore
これが私がサーバーに送信しようとしているメッセージです「HelloFromClient」
これが私のサーバーコンソールがそれを表示する方法です
誰かが私がメッセージを正しく受け取らなかった理由を教えてもらえますか?、それは本当に非常に奇妙で、私はそれを解決することができません助けが必要です
And \またはStreamReaderを使用してメッセージを受信できますか?コードが非同期のままになるようにノンブロッキングですか?
c# - SslStreamソケット切断の検出
ソケットをラップするNetworkStreamの上でSslStreamを使用していますが、この状況でソケットの切断を検出するにはどうすればよいですか。
言い換えれば、リモートクライアントが接続を閉じたかどうかを検出したいのです。
c# - 自己署名証明書を検証する方法
あなたが私に答えられるように、私はあなたに私の質問をはっきりと提供します
SslStreamを使用して保護したクライアントサーバー(ソケット)接続があり、sslを使用すると、クライアントがサーバーにのみ接続するようになります。
そのためには、サーバー認証を検証し、サーバーが実際のサーバー(私のサーバー)であることを確認する関数をクライアントに追加する必要があります
しかし、自己署名証明書を検証してあなたの助けを求める方法が本当にわかりません
よろしくお願いいたします。
c# - SslStream.WriteAsync 「別の書き込み操作が保留中の場合、BeginWrite メソッドを呼び出すことはできません」
クライアントに非同期でデータを書き込むときにこの問題を回避する方法
マイコード
c# - sslstream "別の書き込み操作が保留中の場合、BeginWrite メソッドを呼び出すことはできません"
sslstream が複数のメッセージを次々に送信するのに少し苦労しています。
データを送信するためにクライアントを呼び出す方法
私が受け取るエラーメッセージは次のとおりです。
これを機能させるためにさまざまなソリューションを試しましたが、機能するものはありません。
基本関数は await を使用し、その関数が呼び出されます
基本関数はタスクを返し、クライアント メソッドで await を使用します
私はまだ同じエラーを受け取ります。これを機能させる方法はありますか?
sslstream - c# SslStream.WriteAsync を高速で使用する
SslStream.WriteAsync で厄介な問題に直面しています
ここにコードがあります
非常に高速でデータを書き込むと、それは私に教えてくれます
The beginwrite method cannot be called when another write operation is pending
[注] : 高速とは、このようなものを意味します