【发布时间】:2015-07-27 20:18:00
【问题描述】:
我正在尝试使用此答案Import Certificate Programatically 中描述的方法在我的客户端 GUI 中以编程方式导入 X509 证书。我的代码如下:
char[] password = "changeit".toCharArray();
File file = fc.getSelectedFile();
char SEP = File.separatorChar;
File dir = new File (System.getProperty("java.home") + SEP + "lib" + SEP + "security");
File keystoreFile = new File(dir, "cacerts");
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
InputStream targetStream = new FileInputStream(file);
CertificateFactory cf = CertificateFactory.getInstance("X509");
X509Certificate c = (X509Certificate) cf.generateCertificate(targetStream);
FileInputStream in = new FileInputStream(keystoreFile);
trustStore.load(in, password);
in.close();
trustStore.setCertificateEntry("alias", c);
FileOutputStream out = new FileOutputStream(keystoreFile);
trustStore.store(out, password);
out.close();
但是当我运行程序并尝试导入它时,我得到一个异常,例如:
java.io.FileNotFoundException: C:\Program Files\Java\jre1.8.0_51\lib\security\cacerts (Access is denied)
我知道密码“changeit”是默认密码,它是正确的,因为我使用命令行 keytool 对其进行了交叉检查。
我在这里缺少什么吗?提前致谢!
解决方法:
感谢 Manuel 回复中的链接,我找到了解决方案。显然,Program Files 中的 Java 文件夹没有 OS 用户(写入)的正确权限。我想知道这是否是默认设置,即使是 Linux 操作系统?是否可以在不手动更改权限的情况下解决它?
【问题讨论】:
标签: java security filenotfoundexception x509