gpt4 book ai didi

Java 从 Windows keystore 访问中间 CA?

转载 作者:可可西里 更新时间:2023-11-01 12:47:05 27 4
gpt4 key购买 nike

我需要在 Windows 上构建证书链,从 X.509 智能卡证书通过一个或多个中间 CA 到根 CA。当 CA 证书位于 JKS keystore 中时,这很容易,但我还需要使用 Windows keystore 。

我可以从“Windows-ROOT”获取根 CA 证书,但无法访问“中间证书颁发机构” keystore 。

有人做过吗?

谢谢!

最佳答案

SunMSCAPI 加密提供程序仅支持两个 keystore :Windows-MY(个人证书库)和Windows-ROOT(可信机构证书库),因此我不认为可以直接访问其他 Windows 证书存储区。然而,这可能不是必需的,因为 Windows-MY keystore 似乎能够使用其他商店的证书构建证书链。

这是我用来测试它的代码片段:

KeyStore ks = KeyStore.getInstance("Windows-MY");
ks.load(null, null) ;
Enumeration en = ks.aliases() ;
while (en.hasMoreElements()) {
String aliasKey = (String)en.nextElement() ;
Certificate c = ks.getCertificate(aliasKey) ;
System.out.println("---> alias : " + aliasKey) ;
if (ks.isKeyEntry(aliasKey)) {
Certificate[] chain = ks.getCertificateChain(aliasKey);
System.out.println("---> chain length: " + chain.length);
for (Certificate cert: chain) {
System.out.println(cert);
}
}

如果我在个人证书存储中添加带有私钥的单个证书,链长度为 1。在中间 CA 证书存储中添加 CA 后,我第二次启动程序,现在链长度为 2。

更新(4 月 2 日)可以在 Windows-MYWindows-ROOT keystore 中以编程方式添加证书,但有一些限制:

  • Windows-ROOT 中添加证书时,系统会提示用户进行确认
  • Windows-MY keystore 中添加的所有证书都是 TrustedCertificateEntry(从 keystore 的角度来看,而不是 Windows 的角度)。 keystore 似乎构建了包含所有可用证书的最长链。
  • 没有关联私钥的证书在 Windows 证书存储浏览器中不可见,但可以通过编程方式将其删除。

在 keystore 中添加证书很简单:

Certificate c = CertificateFactory.getInstance("X.509").generateCertificate(new FileInputStream("C:/Users/me/Downloads/myca.crt"));
KeyStore.TrustedCertificateEntry entry = new KeyStore.TrustedCertificateEntry(c);
ks.setEntry("CA1", entry , null);

关于Java 从 Windows keystore 访问中间 CA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5476974/

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