10

プログラムで使用されている現在のトラストストアを教えてくれる関数はありますか?Windowsでは、デフォルトのトラストストアはJAVA_HOME \ lib \ security\cacertsにあります。

ただし、デフォルトはさまざまな方法で変更できます。

  • -Djavax.net.ssl.keyStoreコマンドラインでの使用

  • Keystoreクラスを使用します。

  • プログラムが、アプリケーションが実行されているアプリケーションサーバーで実行されている場合、そのパネルを介してストアパスを設定できます。

  • プログラムがTomcatで実行されている場合、Tomcatの設定によってトラストストアが変更される可能性があります。

そして他の多くの方法。

現在アクティブなトラストストアのディスクパスを見つけるためのプログラム的な方法はありますか?

4

1 に答える 1

17

一般的に言えば、できません(これはこの質問と非常によく似ています)。

JSSE APIでは、証明書の信頼は実際にはトラストストアによって決定されるのではなく、によって決定されTrustManagerます。多くの場合、キーストア(トラストストア)で初期化されますが、これは必須ではありません。さらに、キーストア自体がファイルである必要はありません。デフォルトのトラストマネージャーAPIには、潜在的なトラストストアがどこでどのように使用されたかを確認できるものはありません。

には、元の状態に戻ることができるものはなくSSLSocket、元の状態SSLSocketFactoryに戻ることがSSLContextできるものも、トラストマネージャーを取得できるものもありません。

どのトラストストア/トラストマネージャーが現在アクティブであるかも、アプリケーションに大きく依存します。一般に、アプリケーションが作成している接続がデフォルトを使用していることを示すものはありません。デフォルトは、システムプロパティSSLContextによって初期化できます。javax.net.ssl.*アプリケーションは自由に独自SSLContextのを初期化してソケットを作成できます(これは、特定の値を指定したときにTomcatがコネクタに対して行うことです)。

Java 6以降、デフォルト(現在)SSLContextはグローバルに(を介して)変更することもできますSSLContext.setDefault(...)

デフォルトで使用されているものは、 JSSEリファレンスガイドから確認できます。残りは、各アプリケーションのドキュメントによって異なります。必要に応じて使用-Djavax.net.debug=SSL,trustmanagerすると役立つ場合がありますが、これはAPIアクセスではありません。

(ちなみに、-Djavax.net.ssl.keyStoreトラストストアではなく、デフォルトのキーマネージャのキーストアを設定します。)

于 2012-12-01T14:22:39.950 に答える