有没有办法使用SunMSCAPI通过Java访问Windows本地计算机个人 key 存储?
通常,您可以使用WINDOWS-ROOT(大致相当于Java中的受信任存储)或WINDOWS-MY(其中包含个人证书,大致相当于Java中的 key 存储)从Windows证书存储中检索证书。
这对于用户来说效果很好,但即使在模拟 SYSTEM 用户时,我也无法检索本地计算机的个人证书。
存在some与此相关的问题use JNA (我想避免这种情况,特别是因为从那里检索私钥似乎很复杂)。
另外,有人used psexec模拟 SYSTEM 用户(使用 psexec -s)。我也尝试过这个,但没有成功。
最后还有一个open bug在 Java Bug 系统中。
如果有人知道如何使用 Java 从 Windows 中的本地计算机个人存储中检索证书,我将不胜感激。
最佳答案
更新
在 bug 跟踪器工作十四年后,JDK-6782021最终在 Java 19(2022 年 Spring )中修复。这意味着这不再是问题。
<小时/>原始答案
是和否。您可以使用the wcsa
utility ,它将拦截 JVM 对 Windows Crypto API 的调用,并让您访问本地计算机凭据。这当然是围绕真正问题的破解,JDK-6782021 ,这是十年前的报道。但它确实可以让您以非常轻松的方式访问本地计算机证书!
所以,是的,可以访问它们,但是不行,不可能使用普通的 Java API 来访问它们。您可以使用商业产品 JCAPI 使用普通 Java 来访问它们,但是对于大多数用途来说,wcsa
util 就可以了。
The Open JDK maintainers are willing to take a patch, though ,所以也许您可以尝试使用 wcsa
存储库中提供的代码来修复它:)
关于java - 使用 Java 访问 Windows 本地计算机个人 keystore (SunMSCAPI),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51205158/