2

Java 7 で SSLServerSocket を作成すると、サーバーはサーバー証明書とキーを正しく使用します。証明書は、CA のサブ CA によって発行されました。したがって、ルート証明書からサーバー証明書までの完全なチェーンには 4 つの証明書があります。完全なチェーンはキーストア/トラストストアにあります。

ただし、クライアントが接続すると、サーバーは常にサーバー証明書自体のみを送信します。これは、Jetty などの Java ベースの Web サーバーにも当てはまります。

ほとんどのクライアントにはルート CA 証明書のみがインストールされており、2 つのサブ CA 証明書はインストールされていないため、これは大きな問題です。

Java に SSL/TLS ハンドシェイクで完全な証明書チェーンを送信させるにはどうすればよいですか?

4

1 に答える 1

4

キーストア内のキー エントリは、単一の証明書用ではなく、証明書チェーン用です (パラメータKeyStore.setKeyEntryを取る を参照してCertificate[] chainください)。

特定のチェーンを使用する場合は、証明書とその秘密鍵があるエントリでチェーンとして設定する必要があります。中間証明書も同じキーストアにあるかどうか、異なるエントリにあるかどうかは問題ではありません。

これは、クライアントに完全なクライアント証明書チェーンを送信させるのと非常によく似た問題です。この質問で説明されているように、同じキーストア構成手順がサーバーの観点からも機能するはずです。

于 2012-10-08T13:27:09.083 に答える