为什么列出pksc11-tool七个对象,而Java Keystore只有一个

时间:2018-12-13 13:17:03

标签: java keystore pkcs#11 opensc sunpkcs11

当我在cmd行中输入时:

pkcs11-tool --login -O

我在智能卡上获得了七个对象,三个公共密钥对象,三个证书对象和一个私有密钥对象。

但是当我尝试用一​​个小的Java代码执行相同操作时,我只找到一个证书:

 String pkcs11Config = "name = SmartCard\nlibrary = opensc-pkcs11.dll\nslot=0";
  ByteArrayInputStream confStream = new ByteArrayInputStream(pkcs11Config.getBytes());
  Provider prov = new sun.security.pkcs11.SunPKCS11(confStream);
  Security.addProvider(prov);
  String pin = "0000000";
  KeyStore cc = KeyStore.getInstance("PKCS11", prov);
  cc.load(null, pin.toCharArray());

  // Look for certificate
  Enumeration aliases = cc.aliases();
  for (Enumeration e = aliases; e.hasMoreElements();) {
    Object alias = aliases.nextElement();
    System.out.println("Alias is : " + alias);
  }

为什么找不到使用此代码的公钥或其他证书?

1 个答案:

答案 0 :(得分:1)

这是JAVA的SunPKCS11提供程序的标准行为。通常在“ PKCS#11参考指南” 中记录它的实现:

为您的JAVA版本选择正确的指南,并查看“ KeyStore要求” 一章。您会发现SunPKCS11提供程序仅为证书对及其匹配的私钥(在您的情况下为一个条目)返回别名,而忽略所有其他对象。