【问题标题】:Authorization Error while loading Java cacerts programatically以编程方式加载 Java cacerts 时出现授权错误
【发布时间】: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


    【解决方案1】:

    你遇到了和Access is denied java.io.FileNotFoundException描述的一样的问题

    您需要定义一个文件名,而不仅仅是代码中看到的目录:

    File dir = new File (System.getProperty("java.home") + SEP + "lib" + SEP + "security");
    File keystoreFile = new File(dir, "cacerts"); <-- file name missing, 'cacerts' is a directory
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-21
      • 1970-01-01
      • 2021-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-03
      相关资源
      最近更新 更多