問題タブ [jsse]
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.
java - Java でサポートされている暗号スイートのリストを編集することは可能ですか?
以下を使用して取得できる、Java でサポートされている暗号スイートのリストに暗号スイートを追加することは可能ですか。getSupportedCipherSuites();
java - ブロックされた SSLSocket を閉じるには?
すべての接続をシャットダウンするオプションが必要な Java サーバーがあります。この一環として、各クライアント ソケットで close() を呼び出しています。私が抱えている問題は、この呼び出しが無期限にブロックされることがあるということです。
これは、数百人のユーザーをシミュレートすることによってのみ再現できるため、特定するのは困難ですが、書き込み時にそのソケットがブロックされている場合に発生すると思われます。
ソケットで shutdownOutput() を呼び出すと役立つという別の質問を読みましたが、SSLSocket (私が使用している) ではサポートされていません。
別の方法はありますか?書き込みのためにキューに入れられたデータが送信されるかどうかは重要ではありません。接続を強制終了する必要があるだけです。
java - SSLException: 無効なパディング TLS アプリケーション データのラップ解除
数か月前、NIO と SSLEngine を使用して SSL Web サーバーを開発しました。GET リクエストは、小さな POST リクエスト (~10KB 未満) と同様にうまく機能します。ただし、それよりも大きなものを POST すると、散発的な SSLException 例外が発生します。
たとえば、小さな画像 (~16 KB) を POST すると、アプリケーション データを表す 3 つの TLS レコードが表示されます。1 つ目は HTTP ヘッダーで、残りの 2 つにはペイロードが含まれます。パケットの小ささは次のとおりです。
私のコードでは、SSLEngine を呼び出して TLS レコード (アプリケーション データ) をアンラップ/復号化します。多くの場合、SSLEngine は 2 番目のレコードをアンラップしようとするとチョークします。エラーは次のとおりです。
エラーをスローしているコードは次のとおりです。
次の行で SSLException がスローされます。
このエラーは散発的に発生します。見える時もあるし、見えない時もある。多くの場合、エラーが表示され、単純にデータを再 POST すると (ブラウザを更新するなど)、すべてが正常に機能します (エラーは発生しません)。
私は決して SSL の専門家ではないので、問題をデバッグする最善の方法がわかりません。unwrap メソッドを正しく呼び出していると確信しています。2 番目のレコードは何らかの形で破損していますか? 暗号が変更されたので、握手を再開する必要がありますか? このエラーが発生した場合はどうすればよいですか?
他のポイントを結合します。
- Sun/Oracle JDK 6 と、それにバンドルされている Java Secure Socket Extension (JSSE) を使用しています。
- iOS 6 の Mobile Safari でこのエラーが頻繁に発生します。FireFox でこの問題が発生することはめったにありません。
前もって感謝します!
java - クライアント証明書を使用した SSL 再ネゴシエーションにより、サーバー バッファ オーバーフローが発生する
クライアント証明書を使用して HTTPS 経由で Apache Web サーバーに接続し、サーバーへのファイルの HTTP PUT を実行する Java クライアント アプリケーションをコーディングしました。小さなファイルでは問題なく動作しますが、大きなファイルではクラッシュします。
Apache サーバーのログには次のように表示されます。
クライアントの応答は次のとおりです。
私はこのプロセスに詳しくないので、ここで再交渉が必要なのか、それともそれを防ぐために何かできることがあるのかわからない. それとも、アプリケーション データを送信する前に、再ネゴシエーションが完了するまでクライアントを待機させることができますか? 以下は、クライアント コードの抜粋です (エラー処理は削除されています)。
SSLSocket のような下位レベルの API を使用し、HandshakeCompletedListener を活用する必要があるのではないかと考えています。
また、Apache SSLVerifyDepth ディレクティブが、再ネゴシエーションが発生している理由と関係があるかどうかも疑問に思っています。ディレクトリごとのコンテキスト (1 つのアップロード ディレクトリのみ) で値 2 のディレクティブを取得しました。Apache のマニュアルでは、次のように説明されています。
ディレクトリごとのコンテキストでは、HTTP 要求が読み取られた後、HTTP 応答が送信される前に、再構成されたクライアント検証の深さで SSL 再ネゴシエーションを強制します。
ここで要求されているのは、Java デバッグ出力です。
ここで要求されているのは、getMyCustomClientCertSocketFactory ソースです (PEM ファイルから証明書とキーを取得します)。
java - 証明書チェーンを PEM ファイルに書き込む
単一の証明書または証明書と中間 CA の証明書を含む証明書チェーンがあります。これをPEM形式のファイルに書きたいと思います。サードパーティのライブラリなしで既存のJavaライブラリで達成することは可能ですか? 以下は、証明書チェーンの私のコードです。
ここで、この証明書を PEM ファイルに書き込みたいと思います。私を助けてください。
java - SSL サーバーソケットは認証オプションを必要としています
SSLServerSocket.setWantClientAuthについて:クライアントが証明書を送信しないことを選択した
場合にこれが設定されている場合、ネゴシエーションは続行されます。
また、クライアントが証明書を送信したがトラストストアの一部ではない場合にもこれが発生することに気付きました。この場合もネゴシエーションは失敗しません。true
では、この設定の使用例は何ですか?
java - JSSE/JCA/JCE パッケージはスレッドセーフですか?
KeyManager、TrustManager、KeyStore などの JSSE/JCE/JCA パッケージのクラスが Java でスレッドセーフかどうか、またはスレッドセーフにする必要があるかどうかを知りたいです。
java - SSLSocketFactoryを使用した後にTwitterに接続する
Twitter4Jを使用してTwitterストリーミングAPIからツイートを取得しようとしています。プロジェクトはSSLSocketを使用してリモートサーバーに接続し、データを取得します。その後、Twitter4Jが呼び出されます。問題は、この接続を確立すると、Twitter4Jで次の例外が発生することです。
[Wed Feb 20 11:32:02 CET 2013] sun.security.validator.ValidatorException:PKIXパスの構築に失敗しました:sun.security.provider.certpath.SunCertPathBuilderException:要求されたターゲットへの有効な認証パスが見つかりません
接続を確立せず、次の行で定義されているキーストアをクリーンアップすると、これは発生しません。
接続するコードは次のとおりです。
別のプロジェクトで何かをテストしたので、問題はSSLSocketFactoryに関連していると思います。たとえば、このコードは魅力のように機能します。
しかし、このコードは機能しません:
私の実際のプロジェクトでは、壊れているので同じことをすることはできません...ほとんどすべて^^
何が問題なのですか?と解決策?
java - JSSE ラップは、2 つのアンラップを必要とする 2 つの TLS パケットを作成します。なんで?
接続されたopensslクライアントを使用したjsse tls暗号化と復号化に関して、Javaアプリケーションの動作を調べています。
最初に、クライアント データに対して unwrap を呼び出すと、常に 37 バイトを消費して 0 を生成することを観察しました。次の unwrap は、いくつかのバイトを消費し、いくつかを生成します。
最初は、クライアントが最初に空の配列をラップすると思っていました。しかしその後、jsse コードが同じことを行うことを発見しましたが、0 ではなく 1 バイトを生成する点が異なります。
したがって、 a へのすべての呼び出しwrapは X バイトを消費して Y バイトを生成しますがunwrap、最初の呼び出しは 37 バイトを消費して 1 バイトを生成し、2 番目の呼び出しは Y-37 バイトを消費して X-1 バイトを生成します。
openssl と jsse はほぼ同じことを行っていますが、それは正しいと思います。しかし、なぜそれが起こるのか知りたいです。その理由がわかりません。追加のリソースが必要です...?