gpt4 book ai didi

java - 在 Java 中访问本地机器证书存储?

转载 作者:可可西里 更新时间:2023-11-01 13:33:07 26 4
gpt4 key购买 nike

是否可以从 Java Servlet 访问存储在本地机器存储(而不是当前用户)中的证书?我试过使用 MSCAPI 提供程序打开“Windows-MY”和“Windows-ROOT”商店,但都不包含来自本地计算机商店的证书。

最佳答案

如果您要使用任何特定于 Windows 的程序,我使用 JNA 使用弹出的相同 Windows 对话框来访问证书 - 这可能无法回答您的问题,但肯定可以让您提供以“Windows 方式访问任何内容”的选项':

    NativeLibrary cryptUI = NativeLibrary.getInstance("Cryptui");
NativeLibrary crypt32 = NativeLibrary.getInstance("Crypt32");

Function functionCertOpenSystemStore = crypt32.getFunction("CertOpenSystemStoreA");
Object[] argsCertOpenSystemStore = new Object[] { 0, "CA"};
HANDLE h = (HANDLE) functionCertOpenSystemStore.invoke(HANDLE.class, argsCertOpenSystemStore);

Function functionCryptUIDlgSelectCertificateFromStore = cryptUI.getFunction("CryptUIDlgSelectCertificateFromStore");
System.out.println(functionCryptUIDlgSelectCertificateFromStore.getName());
Object[] argsCryptUIDlgSelectCertificateFromStore = new Object[] { h, 0, 0, 0, 16, 0, 0};
Pointer ptrCertContext = (Pointer) functionCryptUIDlgSelectCertificateFromStore.invoke(Pointer.class, argsCryptUIDlgSelectCertificateFromStore);

Function functionCertGetNameString = crypt32.getFunction("CertGetNameStringW");
char[] ptrName = new char[128];
Object[] argsCertGetNameString = new Object[] { ptrCertContext, 5, 0, 0, ptrName, 128};
functionCertGetNameString.invoke(argsCertGetNameString);
System.out.println("Selected certificate is " + new String(ptrName));

Function functionCertFreeCertificateContext = crypt32.getFunction("CertFreeCertificateContext");
Object[] argsCertFreeCertificateContext = new Object[] { ptrCertContext};
functionCertFreeCertificateContext.invoke(argsCertFreeCertificateContext);

Function functionCertCloseStore = crypt32.getFunction("CertCloseStore");
Object[] argsCertCloseStore = new Object[] { h, 0};
functionCertCloseStore.invoke(argsCertCloseStore);

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

关于java - 在 Java 中访问本地机器证书存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3612962/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com