13

.p12 証明書をクラスパスから Java キーストアにインポートするにはどうすればよいですか? まず、InstallCert https://code.google.com/p/java-use-examples/source/browse/trunk/src/com/aw/ad/util/InstallCert.javaを使用し、いくつかの変更を加えてサーバー証明書をJava インストール ディレクトリのキーストアにインポートされます。これは正常に機能しますが、クラスパスから証明書をロードしたいと考えています。

編集: .cer 証明書を使用するだけです。次の回答を参照してください

4

2 に答える 2

27

答え:

InputStream certIn = ClassLoader.class.getResourceAsStream("/package/myCert.cer");

final char sep = File.separatorChar;
File dir = new File(System.getProperty("java.home") + sep + "lib" + sep + "security");
File file = new File(dir, "cacerts");
InputStream localCertIn = new FileInputStream(file);

KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
keystore.load(localCertIn, passphrase);
if (keystore.containsAlias("myAlias")) {
    certIn.close();
    localCertIn.close();
    return;
}
localCertIn.close();

BufferedInputStream bis = new BufferedInputStream(certIn);
CertificateFactory cf = CertificateFactory.getInstance("X.509");
while (bis.available() > 0) {
    Certificate cert = cf.generateCertificate(bis);
    keystore.setCertificateEntry("myAlias", cert);
}

certIn.close();

OutputStream out = new FileOutputStream(file);
keystore.store(out, passphrase);
out.close();

Java Web Start の場合、ClassLoader を使用せず、クラス自体を使用します。

InputStream certIn = Certificates.class.getResourceAsStream("/package/myCert.cer");
于 2014-07-24T07:10:33.477 に答える