web-dev-qa-db-ja.com

Javaにcacertsファイルとjssecacertsファイルの両方があるのはなぜですか?

cacertsファイルとjssecacertsファイルの違いについて真剣に混乱しています。

デフォルトでは、Javaはjssecacertsファイルを探し、次にcacertsファイルを探します。

しかし、jssecacertsファイルのポイントは何ですか?

私の理解では、新しいトラストストアを使用する必要がある場合、cacertsのコピーを作成し、すべての新しい信頼できるCAをそのコピーに追加する必要があります。 cacertsのコピー(新しいCAを含む)は、-Djavax.net.ssl.trustStoreシステムプロパティ。そうすれば、そのマシンで実行される他のJavaアプリケーションは、デフォルト以外のCAを誤って信頼することはありません。

47
hooknc

Java™Secure Socket Extension(JSSE)リファレンスガイド から、TrustManagerFactoryは以下の手順を使用して、信頼データを見つけようとします。

  1. システムプロパティjavax.net.ssl.trustStore
  2. Java-home/lib/security/jssecacerts
  3. Java-home/lib/security/cacerts(デフォルトで出荷)

これは、構成概念よりも規約に基づいていると思います。余分なコーディング作業なしで、cacertが使用されます。追加のプライベートCA/Signing証明書の場合、開発者は第1または第2の方法のいずれかを使用できます。前者は特定の証明書のみを含み、後は証明書のリストを含みます。

34
Lee Chee Kiam

私が理解しているように、cacertsファイルは出荷時のデフォルトです。

jssecacertsファイルがある場合は、cacertsファイルに加えてではなく、排他的に使用されます。

私の推奨事項:cacertsファイルを保持し、jssecacertsにコピーして、必要なプライベートCA /署名証明書をjssecacertsファイルに追加します。

13
Chris

良い質問。 JSSEはかつてアドオンであったという歴史的事実から生じたと思います。 JSSEでは複数のプロバイダーが許可されているため、jssecacertsはJSSEプロバイダー専用であり、他のプロバイダーは独自のものを使用する場合があります。

しかし、JSSEの前に誰がcacertsを使用したかは別の質問です。

4
user207421