Используйте JNA для получения сертификата локальной машины - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь получить сертификат из локального компьютера Windows store. То, что вы хотите получить, это сертификат в разделе «Сертификаты (локальный компьютер) -> Личные -> Сертификаты».

Я использовал этот код для доступа к сертификату в пути "Сертификаты - Текущий пользователь -> Личные -> Сертификаты

 NativeLibrary crypt32 = NativeLibrary.getInstance("Crypt32");
 Function functionCertOpenSystemStore = 
 crypt32.getFunction("CertOpenSystemStoreA");
 Object[] argsCertOpenSystemStore = new Object[] { 0, "MY"};
HANDLE h = (HANDLE) functionCertOpenSystemStore.invoke(HANDLE.class, argsCertOpenSystemStore);

Есть идеи о том, как получить сертификат из "Сертификаты (локальный компьютер) -> Личные -> Сертификаты"?

Я пытаюсь использовать JNA, потому что я читаю, что невозможно получить доступ к сертификатам локального компьютера из Java. Единственное, что у меня есть, это получить сертификаты «Текущий пользователь» с помощью хранилища ключей, например:

KeyStore ks = KeyStore.getInstance("Windows-MY", "SunMSCAPI");

Также я попробовал это:

KeyStore ks = KeyStore.getInstance("Windows-ROOT", "SunMSCAPI");

Может кто-нибудь дать мне подсказку?

1 Ответ

0 голосов
/ 15 августа 2018

Да, вы можете использовать wcsa утилиту , которая будет перехватывать вызовы Windows Crypto API и позволит вам получить доступ к учетным данным локального компьютера. Это, конечно, хак вокруг реальной проблемы, JDK-6782021 , о которой сообщалось десять лет назад. Но он позволяет вам безболезненно обращаться к сертификатам локальной машины!

...