是否有方法使用 SunMSCAPI 通过Java访问Windows本地计算机个人密钥存储?
通常,您可以使用WINDOWS-ROOT(大致相当于Java中的可信存储)或WINDOWS-MY(包含个人证书,大致相当于Java中的密钥存储)从Windows证书存储中检索证书。
这对用户来说很好,但即使在模拟SYSTEM用户时,我也无法检索本地计算机的个人证书。
关于use JNA的问题存在some(我想避免,特别是因为从那里检索私钥似乎很复杂)。
另外,有人used psexec模拟SYSTEM用户(使用 psexec -s)。我也试过,但没有成功。
最后,Java Bug系统中还有一个open bug。
如果任何人对如何使用Java从Windows中的本地机器个人存储中检索证书有想法,我将不胜感激。
1条答案
按热度按时间b1zrtrql1#
更新
经过十年的bug跟踪,JDK-6782021终于在Java 19(Spring 2022)中得到了修复。这意味着这不再是一个问题。
原始答案
是的,也不是。您可以使用the
wcsa
utility,它将拦截对Windows Crypto API的JVM调用,并允许您访问本地计算机凭据。当然,这是围绕真实的的问题JDK-6782021进行的一次黑客攻击,该问题在十年前就有报道。但它确实可以让您以一种非常轻松的方式访问本地机器证书!所以,是的,可以访问它们,但不,不可能使用普通的Java API访问它们。不过,您可以使用普通Java使用商业产品JCAPI访问它们,但对于大多数用途,
wcsa
实用程序就可以了。The Open JDK maintainers are willing to take a patch, though,所以也许你可以尝试使用
wcsa
repo中提供的代码来修复它:)