5

システム プロパティを介してカスタム トラストストアを定義しました。

System.setProperty("javax.net.ssl.trustStore", ...);
System.setProperty("javax.net.ssl.trustStorePassword", ...);

VM が既にファイルの読み込みを処理していることを考えると、読み込まれた証明書を一覧表示したいと思います。トラストストアをストリームにもう一度ロードしてそこから証明書を取得したくはありませんが、VM が既にそれ自体でロードした証明書を確認したいと考えています。また、別のツールを使用するのではなく、自分のアプリケーション内からそれらを表示したいと考えています。私はいくつかのグーグルをしましたが、これまでのところ私はこれを見つけることができませんでした.

4

1 に答える 1

10

それらが使用されると、JSSE はこれらの設定を使用してデフォルトを構築しますX509TrustManager(JRE デフォルトをオーバーライドします)。ただし、JSSE アーキテクチャでは原則としてデフォルトのトラスト マネージャーをキーストアから構築する必要がないため、JSSE API には、デフォルトのトラスト マネージャーの構築に使用されたキーストアにアクセスする手段はありません。

プロパティを介して渡されたトラスト ストアの内容を読みたい場合は、javax.net.ssl.trustStore*自分でファイルを開く必要があります。

あなたが手に入れることができる最も近いものは、 defaultX509TrustManagerを使用したデフォルトになりますTrustManagerFactory

編集:

詳細については、OpenJDK の実装を参照してください。

(パブリック API の一部ではない)のロジックは、 (パブリック API の一部でもありません)から取得したでsun.security.ssl.DefaultSSLContextImplを初期化することです。TrustManagerFactoryKeyStoreTrustManagerFactoryImpl

KeyStore ks = TrustManagerFactoryImpl.getCacertsKeyStore("defaultctx");
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(ks);

これは with の動作と一致していTrustManagerFactoryますtmf.init(null)。これもデフォルトのキーストアに依存していましたが、それはパブリック API に記載されています。実際、実装 ( with ) は、 (キーストア パラメーターが null の場合にも呼び出されます)tmf.init(null)に示すように、同じことを行います。TrustManagerFactoryImplengineInitgetCacertsKeyStore

どちらの場合も、KeyStore変数はクラス メンバーに格納されません。これらの初期化メソッドを使用した後にアクセスできないのは単なるローカル変数です。

結果X509TrustManagerImplには確かに信頼できる証明書のリストが含まれていますが、trustedCerts(a) プライベート メンバーであり、(b) JSSE のパブリック API の一部ではありません。

編集2:

ほとんどの場合は機能する可能性が高いが、機能することが保証されていないものが必要な場合は、この回答が役立ちます。デフォルトのトラスト ストアは必ずしも ではないcacertsことに注意してください。

于 2012-01-16T19:30:15.340 に答える