問題タブ [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# - SSL TCP SslStreamサーバーは、未処理の例外「System.Security.Cryptography.CryptographicException:元の署名者が見つかりません」をスローします
TCPデータを送信するクライアント(Objective Cモバイルアプリケーション)からWindows 2008サーバー上のSslStreamでTCPデータを受信するC#TCPサーバーを作成しようとしています。
私はMicrosoftのサンプルコードを使用しています (注:そのコードの変更バージョンはこの質問の最後にあります)つまり、「次のコード例は、SslStreamクラスを使用するTcpListenerの作成を示しています。クライアントと通信します。 ")
例外
ただし、このサーバーコードを実行すると、次の例外が発生します。
また、 http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate.aspxでコードを試しましたが、同様の例外がスローされます。
追加情報
NameCheapからSSL証明書を取得しました。EssentialSSLワイルドカード証明書を購入しました。Windows2008サーバーでCreatedCertificateRequestを作成しました。つまり、次で始まるテキストを取得しました。
その取得したテキストファイルをNameCheapにアップロードし、Certificate.cer
ファイルを電子メールで送信しました。
私のコード
助けてくれてありがとう!
c# - SslStream.Dispose はその内部ストリームを破棄しますか
NetworkStream
次のように、ソケットサーバーでソケットを使用しSslStream
ます。
私の質問は、私が呼び出すとsslStream.Dispose()
、SslStream
その内部ストリームとそのソケットも破棄/閉じますか?
sslStream.Close()
または、stream.Close()
とで3 つのリソースすべてを明示的に閉じる必要がありsocket.Close()
ますか?
sockets - SSL Socket Server との接続の問題
SSLStream を使用する Socket Server は、クライアントからの新しい接続を拒否することがあります。
私はtelentのホスト名ポートを使用しました。Connecting To host...
ポート 6002 でホストへの接続を開くことができませんでした: 接続に失敗しました
を使用netstat -a
しましたが、TCP ステータスが次のように表示されます
TCP 0.0.0.0:6002 ホスト:0 リスニング
また、サービスもリッスンしていると思いtcpview
ます。
クライアント側に表示されるエラーはconnection refused with error code 10061
.
同じソケット サーバーが新しい接続を受け入れており、問題なく正常に動作します。しかし、しばらくすると上記の問題がランダムに発生します。
ソケットを再起動すると、正常に動作し、接続を受け入れますが、頻繁に実行したくありません。これは、既に接続されているクライアントを切断するためです。
誰かがこれをトラブルシューティングするのを手伝ってくれますか?
ありがとう。
c# - 「読み取り」を実行しようとすると SslStream エラーが発生する
TCP/IP (IPv4) ソケットを作成し、着信接続をリッスンする関数がいくつかあります。
そして、クライアントのテスト メッセージを読み取る関数。エラーが発生する場所:
バッファにデータを読み込もうとすると、10054 エラーと client.Connected equals false が表示されます。
c# - TcpClient と SslStream を使用して hotmail アカウントから最新のメールを取得する方法
hotmailアカウントに接続して未読メールをチェックするWindowsテストアプリを作成しました。現在、アプリを使用して、hotmailアカウントから最後のメールを取得しています。
最新のメールを取得する方法と、SSLStream オブジェクトを使用して最新のメールの件名と本文を取得できるかどうかを教えてください。
「最初のメールを取得する」と書かれている場所は、最初のメールの合計バイト数しか取得していません。助けてください。最初のメールの件名と本文を取得します。
コードをいくつか変更すると、hotmail アカウントにアクセスできます。ただし、AOl アカウントにアクセスしようとすると、同じコードを使用します。IO 例外が発生します。このコードを使用して AOL メール システムに接続する方法を教えてください。助けてくれてありがとう。
c# - SslStreamのGETリクエストを作成します
これが少し薄暗い場合はお詫びしますが、このようなものをsslstreamを介して、安全なソケット接続を取得したサーバーに送信したいと思います...
文字列ビルダーを使ってみました
そしてこれを行う
ここで、sbはstringbuilderオブジェクトです。
ストリームから読み取ろうとしてもサーバーから応答がないので、サーバーが私のばかげた要求を理解できないことは明らかです。
webrequestのバリエーションを使用して同じことを実行できることは知っていますが、これを実行しようとしている特定の理由があります...
基本的に、getリクエストを実行できるように、送信用に何をエンコードするかを知る必要がありますか?
c# - C# の HTTPS プロキシ サーバー
HTTPS プロキシ サーバーで作業しています。コンソール アプリケーションである必要があります。マニュアルまたはサンプルを見つけたいと思います。多くの部品または動作しないサンプルを見つけました。SSLStream の MSND の例を試してみましたが、失敗しました。誰かがいくつかの経験や実例を持っていますか?
c# - AppDomain 間で SslStream からの読み取りが成功するのに、空のバッファーが返されるのはなぜですか?
メソッドSslStream
を使用してから通常どおり読み取ると、期待される結果が得られます。Read(byte[] buffer, int offset, int count)
ただし、SslStream
オブジェクトを newに移動するAppDomain
と、読み取りは引き続き正しく機能しているように見えます (つまり、正しい読み取りバイト数が返されます) が、buffer
配列は空です。
どうしてこれなの?
.net - SSLStreamを介してデータを送信するときのパケットの断片化
SSLStreamを使用して「大きな」データチャンク(1メガ)を(認証済みの)クライアントに送信する場合、通常のNetworkStreamを使用する場合よりもはるかに大きいパケットの断片化/分解が見られます。
クライアントで非同期読み取り(つまり、BeginRead())を使用して、ReadCallbackは、最後のパケット(残りのデータ)まで、まったく同じサイズのデータチャンクで繰り返し呼び出されます。私が送信しているデータ(zipファイル)では、セグメントの長さはたまたま16363バイトです。注:受信バッファーはこれよりはるかに大きく、サイズを変更しても効果はありません
SSLは18Kb以下のチャンクでデータを暗号化することを理解していますが、SSLはTCPの上にあるため、SSLチャンクの数はTCPパケットの断片化とは関係がないと思いますか?
基本的に、データがクライアントによって完全に読み取られるまでに、標準のNetworkStream(両方ともローカルホスト上で!)を使用する場合よりも約20倍の時間がかかります。
私は何が欠けていますか?
編集:
SSLStreamの受信(または送信)バッファサイズが制限されているのではないかと思い始めています。同期読み取り(つまりSSLStream.Read())を使用しても、読み取りを試みる前に待機する時間に関係なく、これ以上データが使用可能になることはありません。これは、受信バッファを16363バイトに制限する場合と同じ動作になります。基になるNetworkStreamのSendBufferSize(サーバー上)およびReceiveBufferSize(クライアント上)を設定しても効果はありません。
c# - SslStream クライアントが stunnel サーバーとのハンドシェイクを完了できない
私は、openssl ベースのクライアントが openssl サーバーと対話する完全に機能するシステムを持っています。各クライアントには、サーバーによって検証される独自の証明書があります。証明書は openssl (X509、pem) で生成されています。それらは自己署名されています。
SslStream に基づいてテスト クライアントを書きたいと思います。SslStream クラスのドキュメントのクライアントの例を使用しました。
SslStream クライアントがハンドシェイクを完了できません。stunnel は、クライアントが証明書を送信していないと文句を言います。これは Wireshark で確認されています (証明書の長さ: ハンドシェイク メッセージで 0)。
クライアントに次の例外が表示されます。
内部例外: 受信したメッセージが予期しないものであるか、形式が正しくありません
これは、証明書をロードする方法です。
証明書のさまざまなプロパティを取得しようとしました (例: GetSerialNumberString())。できます。Verify メソッドは false を返します。これは私が次に調査するつもりです。
SslStream のセットアップ方法は問題ではないようです (同じ結果):
認証と同じ:
SelectLocalCertificate
(2回)呼び出され、証明書を返します。ValidateServerCertificate
現在、呼び出されることはありません(驚いたことに)。
どうすればそれをデバッグできますか? あなたが私の問題を解決できればさらに良いです。
アップデート
ドキュメントのX509Chain の例に基づいて、チェーンの検証を実行する関数を追加しました。2 つの興味深いメッセージを含む、証明書に関するあらゆる種類の情報が表示されます。
最後に、verify を呼び出したときよりも詳しい情報はありません。
の出力はopenssl verify cert.pem
異常を報告しません。
アップデート
pem から秘密鍵と証明書を抽出し、cert.pfx (pkcs12) を生成しました。個人のキー ストアに cert.pfx をインポートしても問題はありませんでした。証明書の詳細に、添付された秘密鍵を示す小さなアイコンが表示されます。
個人ストアから証明書を取得するようにクライアントを変更しました。しかし、私はまったく同じ失敗をしています。