Я пытаюсь прочитать сертификат с файловым вводом-выводом каждый раз, когда я пытаюсь получить доступ к своему сертификату под
testApp/src/main/resources -> cert
это всегда читается
X:\workspace1\testApp\target\classes\cert\test.p12
И вот мой код, который я использую. Он всегда выдает исключения с нулевым указателем.
// String fileName = "config/sample.txt";
ClassLoader classLoader = App2.class.getClassLoader();
File file = new File(classLoader.getResource("cert/test.p12").getFile());
FileInputStream fm = new FileInputStream(file);
KeyStore ks = KeyStore.getInstance("PKCS12");
try {
ks.load(fm, "test".toCharArray());
}
catch(Exception e) {
e.printStackTrace();
}
Key key = ks.getKey("test", "test".toCharArray());
Certificate cert = ks.getCertificate("test");
PublicKey publicKey = cert.getPublicKey();
System.out.println("Public key");
System.out.println(Base64.getEncoder().encodeToString(publicKey.getEncoded()));
fm.close();
Я хочу прочитать этот сертификат, чтобы извлечь открытый или закрытый ключ.
NB Вам необходимо закрыть входной поток после использования.
это сработало для меня
File file = new File(classLoader.getResource("./cert/test.p12").getFile());
classLoader.getResourceAsStream("./cert/test.p12")
работало бы еще лучше, если бы не предположение, что это файл или File
вообще.
Ресурсы - это не файлы. Используйте
getResourceAsStream()
и уберите всеFile*
классы.