ホームページ >Java >&#&チュートリアル >サーバーが別の CA によって署名されたクライアント証明書を要求すると、Java SSL ハンドシェイクが失敗するのはなぜですか?

サーバーが別の CA によって署名されたクライアント証明書を要求すると、Java SSL ハンドシェイクが失敗するのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-29 05:36:13577ブラウズ

Why Does My Java SSL Handshake Fail When the Server Requests a Client Certificate Signed by a Different CA?

Java SSL ハンドシェイクにおけるクライアント証明書の省略

SSL ハンドシェイク中の Java の動作により、クライアント証明書が省略され、ハンドシェイクが発生する場合があります。失敗。この問題は、サーバーが特定の CA (この場合は「RootCA」) によって署名されたクライアント証明書を要求し、Java がキーストア内で下位 CA (「SubCA」) によって署名されたクライアント証明書しか見つからない場合に発生します。

キーストア構成の考慮事項:

  1. 証明書チェーン破損: 「SubCA」証明書をキーストアにインポートすると証明書チェーンが中断され、KeyManager がクライアント証明書のみを認識するようになった可能性があります。
  2. 証明書の関連付け: 「SubCA」証明書は、キーストア内のクライアント証明書とその秘密キーを含むエイリアスに関連付ける必要があります。この関連付けは、keytool -v -list -keystore store.jks を使用して確認できます。

サーバー構成の考慮事項:

  1. 認証局不一致: 理想的には、サーバーは「SubCA」によって署名されたクライアント証明書を要求する必要があります。クライアントに提供される信頼できる権限。ただし、Java は証明書チェーン検証を厳密に遵守しているため、このシナリオではハンドシェイクの失敗が発生する可能性があります。

回避策:

この問題を修正するには、クライアント証明書をとその証明書チェーン (「SubCA」証明書を含む) を 1 つのファイル (bundle.pem など) に結合する必要があります。このバンドルされた PEM ファイルは、keytool -importcert -keystore store.jks -alias myalias -filebundle.pem を使用して、クライアントの秘密キーを保持するキーストア エイリアスにインポートできます。これを行うと、Java は完全な証明書チェーンを認識し、SSL ハンドシェイク中に適切な証明書を送信します。

以上がサーバーが別の CA によって署名されたクライアント証明書を要求すると、Java SSL ハンドシェイクが失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。