【问题标题】:programmatically import .cer certificate into keystore以编程方式将 .cer 证书导入密钥库
【发布时间】:2014-07-23 13:03:11
【问题描述】:

如何将 .p12 证书从类路径导入 java 密钥库?首先,我使用 InstallCert https://code.google.com/p/java-use-examples/source/browse/trunk/src/com/aw/ad/util/InstallCert.java 并进行了一些更改,以便将服务器证书导入到 java 安装目录中的密钥库中。这工作正常,但现在我想从我的类路径加载证书。

编辑:我只使用 .cer 证书,请参阅下一个答案

【问题讨论】:

  • 当您解决自己的问题时,您应该将其作为答案。它帮助了我,因为这是我在不久的将来必须处理的问题。所以它可以帮助别人。
  • 好的,很高兴帮助别人:)

标签: java keystore pkcs#12 key-management


【解决方案1】:

答案:

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,使用 Class 本身:

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

【讨论】:

  • 任何线索如何解决访问被拒绝的问题? (虽然我是管理员)java.io.FileNotFoundException: C:\Program Files (x86)\Java\jre1.8.0_45\lib\security\cacerts(访问被拒绝)
  • 也许该文件已被另一个进程使用?也许您对文件和文件夹有一些权限问题,而 Java 本身没有权限?否则没有线索......这个解决方案也适用于 Java7,所以这可能不再适用于 Java8?
【解决方案2】:

我也遇到了“java.io.FileNotFoundException: C:\Program Files (x86)\Java\jre1.8.0_45\lib\security\cacerts (Access is denied)”问题。我必须去文件夹 \securiyy 并手动授予访问 h 的权限

【讨论】:

    猜你喜欢
    • 2011-05-18
    • 2017-10-25
    • 2010-11-03
    • 2013-07-11
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    • 2014-03-01
    相关资源
    最近更新 更多