21

javax.net.ssl.SSLContextJersey-Client アプリケーションで使用するためにセットアップする必要があります。私がやりたいのは、カスタム ルート CA 証明書を受け入れるコンテキストだけです。キーストア ファイルを生成して CA 証明書をインポートする方法がないというのは本当ですか?

4

1 に答える 1

45

キーストア ファイルを生成して CA 証明書をインポートする方法がないというのは本当ですか?

キーストア ファイルなしでそれを行う方法はありますが、何らかの方法で信頼したい CA 証明書をロードする必要があるため、何らかの方法でファイルまたはリソースをロードする必要があります。

TrustManager(また、API をまったく使用せずに、Certification Path API を使用するためのすべての呼び出しを行う独自の実装を実装することもできますKeyStoreが、それはコードの複雑さを増すだけであり、減らすことにはなりません。また、Javaを理解する必要があります。これを正しく行うには、PKI Programmer's Guideを参照してください。)

本当にキーストア ファイルが必要ない場合はKeyStore、メモリ内の API を使用して、証明書を直接読み込むことができます。

これらの行に沿った何かが機能するはずです(テストされていません):

InputStream is = new FileInputStream("cacert.crt");
// You could get a resource as a stream instead.

CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate caCert = (X509Certificate)cf.generateCertificate(is);

TrustManagerFactory tmf = TrustManagerFactory
    .getInstance(TrustManagerFactory.getDefaultAlgorithm());
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(null); // You don't need the KeyStore instance to come from a file.
ks.setCertificateEntry("caCert", caCert);

tmf.init(ks);

SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, tmf.getTrustManagers(), null);

(すべてを閉じて、例外を処理することを忘れないでください。)

この方法で証明書をロードするか、証明書をKeyStoreキーストア ファイルから同様のインスタンスにロードする方が便利かは、ユーザーが決定する必要があります。

于 2013-08-29T15:07:37.600 に答える