通过Java访问Windows证书存储证书?

时间:2015-12-08 21:24:26

标签: java windows x509certificate certificate-store

我希望在CurrentUser / My和LocalMachine / My中编写能够枚举和使用(签名)证书的内容,但我还没有能够为Windows证书库找到任何内容,只有Java自己的秘密商店。 This link看起来很有希望,但我只能使用Java附带的东西。

我之前发现过this question问过,但这是五年前发生的事情,这是计算机时代的很长一段时间。谢谢!

4 个答案:

答案 0 :(得分:6)

-Djavax.net.ssl.trustStoreType=WINDOWS-ROOT启动Java。

有关更多信息,请参见http://www.oracle.com/technetwork/articles/javase/security-137537.html

答案 1 :(得分:1)

Java的跨平台特性有其自身的缺点 - 如果没有外部库,您无法访问某些(或许多)特定于操作系统的内容。 Windows证书存储只能通过Java默认安装不支持的CryptoAPI本机函数访问。

您可以查看此主题:Calling Win32 API method from Java

如果可以使用JNA,则可以使用crypt32.dll中的各种Certificate and Certificate Store Functions来枚举证书并执行签名操作。

答案 2 :(得分:0)

KeyStore keyStore = KeyStore.getInstance(getKeyStoreType(), "SunMSCAPI");
keyStore.load(null, null);

try {
    Field field = keyStore.getClass().getDeclaredField("keyStoreSpi");
    field.setAccessible(true);

    KeyStoreSpi keyStoreVeritable = (KeyStoreSpi)field.get(keyStore);
    field = keyStoreVeritable.getClass().getEnclosingClass().getDeclaredField("entries");
    field.setAccessible(true);
} catch (Exception e) {
    LOGGER.log(Level.SEVERE, "Set accessible keyStoreSpi problem", e);
}

Enumeration enumeration = keyStore.aliases();

答案 3 :(得分:0)

我从Crypt32离开的地方选择,使用JNA来访问证书,如果您要使用任何特定于Windows的程序,则使用弹出的相同窗口对话框:

<button class="ico-search" onclick="frmSiteSearch_conductSearch(); return false;"></button>

这只是一段有效的代码;随意应用您的编码实践。