使用JNA获得本地计算机证书

时间:2018-07-05 13:54:13

标签: java certificate x509certificate keystore jna

我正在尝试从本地计算机Windows存储获取证书。想要获得的是位于“证书(本地计算机)->个人->证书”中的证书。

我使用此代码在“证书-当前用户->个人->证书

 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 :(得分:0)

是的,您可以使用the wcsa utility,它将拦截对Windows Crypto API的调用,并允许您访问本地计算机凭据。当然,这是针对十年前发生的实际问题JDK-6782021的破解。但这确实使您可以轻松访问本地计算机证书!