gpt4 book ai didi

java - openjdk1.7 : fail to list PKCS11 keystore aliases when BouncyCaSTLeProvider is used

转载 作者:太空宇宙 更新时间:2023-11-04 14:47:11 24 4
gpt4 key购买 nike

我想研究 nssdb keystore 以从可用别名中提取一些信息。在同一应用程序的其他部分,我使用 BouncyCaSTLeProvider 来处理其他一些安全问题。下面的小代码显示了我如何加载和运行它,并且与 openjdk-1.6.0 配合良好。现在,对于 openjdk-1.7.0,只有当我不使用 BouncyCaSTLeProvider 或在 PKCS11 提供程序之后添加此提供程序时,它才有效。如果我在 PKCS11 之前添加 BC,一切似乎都可以(无异常(exception)),但 Keystore.aliases() 为我的 nss 容器返回一个空列表。就像如果 load() 不起作用一样。

import java.io.InputStream;
import java.io.ByteArrayInputStream;
import java.util.Enumeration;
import java.security.KeyStore;
import java.security.Provider;
import java.security.Security;
import java.security.cert.X509Certificate;
import java.security.cert.Certificate;
import org.bouncycastle.jce.provider.BouncyCastleProvider;

public class TestNSS {
public static void main(String[] args) {
try {
Provider prov = new BouncyCastleProvider();
Security.addProvider(prov);

String config = "name = nssdb\n";
config += "nssSecmodDirectory = /nssdbpath\n";
InputStream stream = new ByteArrayInputStream(config.getBytes("UTF-8"));
Provider nss = new sun.security.pkcs11.SunPKCS11(stream);
stream.close();
Security.addProvider(nss);

KeyStore ks = KeyStore.getInstance("PKCS11", "SunPKCS11-nssdb");
ks.load((InputStream)null, "".toCharArray());
System.out.println("load is ok: SunPKCS11-nssdb");
for (Enumeration<String> e = ks.aliases(); e.hasMoreElements();) {
String alias = e.nextElement();
Certificate cert = ks.getCertificate(alias);
System.out.println(" . alias: "+alias+", "+cert.getType()+","+((X509Certificate)cert).getNotAfter());
}
} catch(Exception e) {
e.printStackTrace();
}

}
}

欢迎任何想法......

注意:/nssdbpath 包含使用 certutil 创建的 nssdb 结构。

最佳答案

我发现- java.security 中的 SunPKCS11 实例化是 openjdk7 与 openJDK6 相比的变化。- 通过 nss.cfg 加载我的 nssdb 而不是默认的“nodb”模式对于这个问题看起来没问题,但这不是有效的解决方法,因为会导致诸如 keytool 错误之类的副作用...

此外,- 我仍然不知道为什么 BouncyCaSTLeProvider 与 SunPKCS11 交互。- 看起来 nssdb 不是通过 load() 方法加载的,而是在 SunPKCS11 实例化时加载的- JVM 中只能加载一个具有单个 nssdb 的 SunPKCS11 实例

=> SunPKCS11 不是读取 nssdb 数据的好方法:我将通过外部(非 java)代码作为解决方法。

无论如何,如果有人有其他解决方案,我仍然有兴趣阅读。

关于java - openjdk1.7 : fail to list PKCS11 keystore aliases when BouncyCaSTLeProvider is used,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24269633/

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