使用Java访问Windows本地计算机个人密钥库(SunMSCAPI)

bq9c1y66  于 2023-06-20  发布在  Java
关注(0)|答案(1)|浏览(164)

是否有方法使用 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中的本地机器个人存储中检索证书有想法,我将不胜感激。

b1zrtrql

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中提供的代码来修复它:)

相关问题