問題タブ [handshake]
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.
ssl - 着信 SSL (https) ハンドシェイク (SSL ワイヤ形式) を検出する方法は?
着信 TCP 接続を受け入れるサーバーを作成しています。サーバーが TCP 接続を受け入れ、クライアントから既に 16 (またはそれくらい) バイトを受信しているとします。これらの 16 バイトを知っている場合、サーバーはクライアントが SSL ハンドシェイクを開始する必要があるかどうかをどのように検出できますか?
実験を行ったところ、SSL 経由で localhost (127.0.0.1 または AF_UNIX) に接続している Linux システムで、クライアントが次のハンドシェイク (hexdump) を送信し、その後に一見ランダムな 16 バイトが送信されることが示されました。
クライアントが SSL ハンドシェイクを送信しているかどうかを判断できるようにするために、サーバーはこれらの最初の数バイトをどのようにプローブする必要がありますか? プローブは、すべての有効な SSL ハンドシェイクに対して true を返す必要があり、SSL ハンドシェイクではないクライアントによって送信されたメッセージに対して高い確率で false を返す必要があります。プローブにライブラリ (OpenSSL など) を使用することは許可されていません。プローブは単純なコードでなければなりません (C または Python の数十行のような)。
java - Java で TCP の 3 ウェイ ハンドシェイクを実装する
Java を使用して TCP プロトコルを実装したいと考えています。私はSunのドキュメントと例を読みましたが、それらはすべてソケットを開くだけで、クライアントはサーバーが接続を受け入れるのを待ってからデータを送信します。
Java を使用して 3 ウェイ ハンドシェイクとデータ検証を実装するにはどうすればよいでしょうか。サーバーとクライアントはどのようにシーケンス番号を交換しますか? Java は、スリーウェイ ハンドシェイクを実装するためのクラス/メソッド (または少なくともインターフェイス) を提供しますか?
誰かが私にいくつかのアイデアを教えてくれますか、またはいくつかの例にリンクできますか?
前もって感謝します、
ssl - SSLハンドシェイクは、2つのCA署名付き証明書と1つの自己署名証明書を含む-ベリサインチェーン証明書-で失敗します
問題が発生し、デバッグしようとしています。ベリサイン証明書を購入しました。使用する場合:
SSLハンドシェイクが完了することはなく、最後にエラーが表示されます。
3つ---BEGIN/END CERTIFICATE---
のタグが表示されます。チェーン内の2つの証明書はベリサイン署名されていますが、1つは自己署名されています。
誰かがこの自己署名証明書がCA署名証明書にどのように表示されるかを説明できますか?
このエラーは
19 (self signed certificate in certificate chain)
無害ですか?そうでない場合、何が原因である可能性がありますか?クライアントは信頼できるストアにCA証明書を持っていますが、自己署名証明書には何もありません。それが問題を引き起こしていると思いますか?はいの場合、どうすればよいですか。
- チェーン証明書から自己署名証明書を削除するには、CA署名付き証明書をチェーンに2つだけ残しておくにはどうすればよいですか?
- この自己署名証明書をクライアントの信頼できるストアに追加しますか?
ssl - 新しい証明書の使用後に TLS ハンドシェイクが失敗する
TLS プロトコルを使用してセキュア ソケットを開こうとしています。クライアントとサーバー間で送信されたレコードを見ると、ClientHello、ServerHello、Certificate (サーバー)、ServerHelloDone、ClientKeyExchange、および ChangeCipherSpec (クライアント) の順に進むことができます。ただし、サーバーはクライアントの Finished メッセージの解読に失敗します。次に、いくつかの通常の TCP メッセージが交換されます。最初にサーバーから送信されたレコードが Finished フラグ付きで、次にクライアントから送信された 2 つのレコード、2 番目のレコードが Finished フラグ付きで、次にサーバーから送信されたもう 1 つのレコードです。
このセットアップは以前は機能していましたが、最近サーバーの証明書を変更しました。これを考えると、暗号化されたデータの最初の部分を復号化しようとするときではなく、証明書レコードの後にハンドシェイクが失敗すると予想していました。このハンドシェイク エラーは、認証されていない証明書を示していますか? そうでない場合、それは何を示していますか?アラートを受け取りませんでした。
java - Java サーバーの自己署名証明書 + クライアント証明書と SSL handshake_failure
以前は正常に使用されていた Web サービスに接続していますが、ホスト名が変更され、2 つの .pem ファイルが送られてきました。1 つは CA で、もう 1 つは新しいクライアント証明書です。
(Java 1.5、Spring + Spring Web Services を Apache httpclient で使用していますが、問題は証明書、キー、および SSL 自体にあると思われます。)
両方の .pem ファイルと、Firefox から cacerts にエクスポートしたホストの .crt をインポートしました。ただし、この例外が発生するため、明らかに何か間違ったことをしています:
System.setProperty("javax.net.debug", "all") を使用して SSL ロギングを有効にすると、サーバー証明書が受け入れられ、クライアントの鍵交換の後または途中で発生することがわかります。
これは何を意味するのでしょうか?「no IV for cipher」というメッセージの意味は何ですか?
編集: 少し調べたところ、ばかげたエラーが見つかりました - javax.net.ssl.keyStore プロパティが正しく設定されていないため、キーストアがまったく読み込まれませんでした。ただし、接続リセットの例外が発生し、「暗号の IV がありません」というメッセージが表示されるようになったので、ここで基本的に同じ質問をもう一度します。
vb.net - Websocket(ドラフト76)ハンドシェイクの難しさ!
次のキーを使用して、正しいハンドシェイク応答文字列を計算しています
。Key1:18x 6] 8vM; 54 *(5:{U1] 8 z [8
Key2:1_ tx7X d <nw 334J702)7] o} `0
Key3 :54:6d:5b:4b:20:54:32:75
Key1とKey2の値を計算しました:
Key1:0947fa63(hex)
Key2:0a5510d3
しかし、次に何をすべきかわからないので、私が収集できるものから、それらを連結してMD5を作成しますが、それはうまくいかないようです。つまり、MD5ハッシュ:0947fa630a5510d3546d5b4b20543275
ヘルプ!
java - Java サーバーの自己署名証明書 + クライアント証明書と SSL - 接続のリセット
(すでに同様の質問をしたことがありますが、クライアント キーが読み込まれていないことが判明しましたが、さらに例外が 1 つしかないため、別の質問を投稿します。)
以前は正常に使用されていた Web サービスに接続していますが、ホスト名が変更され、2 つの .pem ファイルが送られてきました。1 つは CA で、もう 1 つは新しいクライアント証明書です。
(Java 1.5、Spring + Spring Web Services を Apache httpclient で使用していますが、問題は証明書、キー、および SSL 自体にあると思われます。)
両方の .pem ファイルと、Firefox から cacerts にエクスポートしたホストの .crt をインポートしました。ただし、この例外が発生するため、明らかに何か間違ったことをしています:
System.setProperty("javax.net.debug", "all") を使用して SSL ロギングを有効にすると、サーバー証明書が受け入れられ、クライアントの鍵交換の後または途中で発生することがわかります。
接続が何度もリセットされるのはなぜですか? また、これをトラブルシューティングするにはどうすればよいですか?
java - JavaとTomcatを使用したWebサービスでのSSLハンドシェイクの問題
Axisで実行されるWebサービスをJavaWebアプリケーション(Tomcatで実行される)で使用する必要があります。Webサービスを作成した会社は、テスト用にHTTPSと自己署名証明書を使用しています。
Netbeansウィザードを実行してWSDLに基づいてWebサービスを生成しましたが、これは正しく実行されています。ブラウザを使用してWebサービスのWebサイトにアクセスすると、SSL証明書が原因で警告が表示され、例外を作成する必要があります。
コードを実行しようとすると、SSL接続が確立されたときに例外が発生します。例外は次のとおりです。
1.1。
com.sun.xml.ws.client.ClientTransportException:HTTPトランスポートエラー:javax.net.ssl.SSLHandshakeException:致命的なアラートを受信しました:handshake_failure
そして時々(コードを変更せずに)
2.2。
com.sun.xml.ws.client.ClientTransportException:HTTPトランスポートエラー:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIXパスの構築に失敗しました:sun.security.provider.certpath.SunCertPathBuilderException:見つかりません要求されたターゲットへの有効な認証パス
証明書をJavaVMやTomcatに組み込む必要があると思います。また、信頼できるソースではないことを無視するように指示します。
これを行う方法?この安全なWebサービスを正しく利用するにはどうすればよいですか?
私が提供する情報が十分でない場合は、さらに質問してください。
ありがとう
エゼキエル
アップデート:
私はこの2つのことを試しましたが、どちらも成功しませんでしたが、例外は同じです。
オプション1)
オプション2)KeyStore ks = KeyStore.getInstance( "pkcs12"); ks.load(new FileInputStream( "/ home / serverapp / BSS-cert.p12")、 "password" .toCharArray());
また、Webサービスが問題だと思ったので、HTTPS接続を確立しようとしましたが、入力ストリームを開くと同じエラーで失敗します。
tcp - TCP3ウェイハンドシェイクの質問
したがって、クライアントは、SYNパケットをseqでサーバーに送信することによってTCP接続を開始します。#X。次に、サーバーはX+1のSYN+ACKで応答します。クローズ接続プロトコルが制定された場合のFINパケットについても同じことが言えます。
だから私の質問は、なぜサーバーはXだけでなくX + 1をACKするのですか?SYNパケットとFINパケットはデータを便乗させないと思いました。これには他に理由がありますか?サーバーがXではなくX+1をACKする理由について私は混乱しています。
delphi - delphi6 で Websocket ハンドシェイクを行いたい
ドラフト hixie-76 を使用して Delphi6 で Websocket サーバーを構築しようとしていますが、ハンドシェイクに問題があります。
3つの部分で取得したmd5フィンガープリントは、試してみると正しくないようですが、プロトコル仕様で指定された例で同じアルゴリズムを使用すると、良好なmd5応答が得られます...
私はこのように処理しています.key2と同じように、key1で見つかった数値を32ビットワードのスペース数で割って変換し、最後に最後の8バイト(key3)を追加して、md5エントリとして使用する128ビット文字列を取得します.
key1 と key2 に 155712099、173347027 を使用し、key3 に 'Tm[K T2u' を使用すると、正しい md5 フィンガープリントが取得されるため、このアルゴリズムがクライアントに正しいフィンガープリントを提供しない理由がわかりません
ここに私が受け取るものの例があります:
そして、それに応じて私が与える握手
さようなら、私の応答に別の問題があるかもしれませんが、md5 指紋に問題があるようです。
誰かが私の間違いがどこにあるかを見ていますか??
よろしくお願いいたします。
アップデート
私はこのユニットを見たことがありますが、読むのが非常に下手でない限り、このクラスのハンドシェイク部分は md5 合計を計算しません。現在の (76) ではなく、古いバージョンのプロトコルを使用していると思います。
次のコードを見ると、回答が md5 応答なしで書かれていることがわかります。
` try // リクエスト ヘッダーを読み取る HandshakeRequest := TWebSocketRequest.Create(ServerConnection);
E を除く: TWebSocketHandshakeException do begin // ハンドシェイクが失敗した場合は接続を閉じます ServerConnection.Disconnect; 終了;`
再度、感謝します
更新 2011 04 14
私はついに問題がどこにあったかを見つけました...
私はそのように私の応答を構築していました:
resp := [...] +'Sec-WebSocket-Origin: '+ origin + #13#10 +
したがって、md5フィンガープリントの前に2ではなく3 0x0D 0x0Aがありました...
#13#10#13#10 +
md5response;
私は自分の質問に答えることができないので、解決したとマークすることはできませんが、そうです! :)