ホームページ >Java >&#&チュートリアル >Java クライアントが SSL ハンドシェイク中に証明書を送信しないのはなぜですか?

Java クライアントが SSL ハンドシェイク中に証明書を送信しないのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-02 07:34:10600ブラウズ

Why Doesn't My Java Client Send Its Certificate During SSL Handshake?

SSL ハンドシェイク中に Java クライアントが証明書を送信できないのはなぜですか?

Java を使用して安全な Web サービスに接続しようとしている場合、ユーザーはハンドシェイクの失敗に頻繁に遭遇します。キーストアとトラストストアが正しく構成されているにもかかわらず、根本的な問題は、ハンドシェイク中に Java がクライアント証明書の送信に消極的であることが原因であることがよくあります。

問題の理解:

  1. サーバー信頼できる RootCA によって署名されたクライアント証明書が必要です。
  2. Java はキーストア内を検索し、 SubCA によって署名されたクライアント証明書のみが検索され、それ自体が RootCA によって信頼されています。
  3. Java はキーストアを超えて検索せず、トラストストアを検索から除外します。
  4. 結果として、Java は次のように主張します。適切な証明書がないため、ハンドシェイクに失敗します。

提案されました解決策:

1.壊れた証明書チェーンに対処する:

証明書チェーンが壊れることなく、SubCA 証明書がキ​​ーストアに正しくインポートされたことを確認します。これは、keytool -v -list -keystore store.jks を使用して行うことができます。エイリアス エントリごとに 1 つの証明書しか表示されない場合は、チェーンが壊れている可能性があります。

証明書チェーンをキーストアにインポートします:

問題を解決するには、クライアント証明書をインポートし、証明書チェーン全体を秘密鍵を含むキーストア エイリアスにまとめます。

2.サーバー側の構成の問題:

SubCA 署名付き証明書に対するサーバーの要求は合理的ですが、Java がその要求に厳密に従うと、不必要に制限が厳しくなる可能性があります。 Chrome や OpenSSL などのブラウザは、この点でより柔軟であることが確認されています。

回避策:

この問題を回避するには、別のアプローチを使用できます。

  1. keytool -exportcert -rfc -file clientcert.pem を使用して、キーストアからクライアント証明書をエクスポートします。 -keystore store.jks -alias myalias。これにより、PEM ファイルが作成されます。
  2. クライアント証明書と中間 CA 証明書 (およびオプションでルート CA 証明書) を単一のbundle.pem ファイルに結合します。
  3. 証明書バンドルをキーストアにインポートし直します。 keytool -importcert -keystore store.jks -alias myalias -filebundle.pem.
を使用して、秘密キーを含むエイリアスを作成します。

以上がJava クライアントが SSL ハンドシェイク中に証明書を送信しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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