2015-07-27 1 views
0

Я пытаюсь импортировать сертификат 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? Работает ли это без изменения прав вручную?

ответ

0

Вы имеете такую ​​же проблему, как описано 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