Mer*_*ter 8 java windows x509certificate
我需要在Windows上构建证书链,从X.509智能卡证书到一个或多个中间CA到根CA. 当CA证书位于JKS密钥库中时,这很容易,但我也需要使用Windows密钥库.
我可以从"Windows-ROOT"获得根CA证书,但我无法访问"中级证书颁发机构"密钥库.
有没有人这样做过?
谢谢!
SunMSCAPI加密提供程序仅支持两个密钥库:( Windows-MY个人证书存储区)和Windows-ROOT(受信任的机构证书存储区),因此我认为不可能直接访问其他Windows证书存储区.但是它可能没有必要,因为Windows-MY密钥库似乎能够使用来自其他商店的证书构建证书链.
这是我用来测试它的代码片段:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我在个人证书存储区中添加带有私钥的单个证书,则链长为1.在中间CA证书存储区中添加CA后,我再次启动该程序,链长现在为2.
更新(4月2日)
可以在Windows-MY和Windows-ROOTkeystore中以编程方式添加证书,但有一些限制:
Windows-ROOT在用户中添加证书时,系统会提示您进行确认Windows-MY密钥库中添加的所有证书都是TrustedCertificateEntry(从密钥库的角度来看,不是Windows的观点).密钥库似乎构建了具有所有可用证书的最长链.在密钥库中添加证书非常简单:
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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17405 次 |
| 最近记录: |