java - 使用 Java 访问 Windows 本地计算机个人 keystore (SunMSCAPI)

标签 java windows certificate client-certificates mscapi

有没有办法使用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/

相关文章:

java - 将 javaFX 客户端连接到 NodeJs 服务器

ssl - GlassFish 5.1 中缺少 Google reCAPTCHA 所需的证书

Java SSL/TLS 忽略过期的证书? (java.security.cert.CertPathValidatorException : timestamp check failed)

java - 如何使用自签名证书在签名的 jar 文件中设置发布者名称?

java - 如何自动化 Kafka 测试

java - 如何在代码中安全地存储私钥

java - 当将 `openjdk:11` 或 `openjdk:8` 与 CGroup 的实验标志一起使用时,是否仍需要 `-Xmx`

java - NoSuchMethodError : <init> in com. sun.glass.ui.win.WinApplication.staticScreen_getScreens

c++ - 在 Visual Studio 2013 上的 C++ 中使用 pthread

windows - 如何在 Ansible 的 win_environment 模块之后更新 Windows 环境变量?