Я пытаюсь импортировать сертификат X509 программно в графический интерфейс клиента, используя метод, описанный в этом ответе . Мой код выглядит следующим образом:Ошибка авторизации при загрузке Java cacerts programatically
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» является паролем по умолчанию, и это правильный, потому что я перекрестил его, используя ключ командной строки.
Что-то я здесь не хватает? Заранее спасибо!
Решение:
Благодаря ссылке в ответ Мануила я нашел решение для этого. Очевидно, что в папке Java в Program Files не было прав для пользователя ОС (для записи). Я хочу знать, действительно ли это по умолчанию, даже в случае ОС Linux? Работает ли это без изменения прав вручную?