虽然无法访问usb令牌的privateKey,但为什么我们在Java中使用keystore.getKey()对pdf进行数字签名

时间:2017-10-06 08:40:57

标签: itext digital-signature hsm

根据所有读数,我发现,在使用USB令牌(HSM)时,我们无法从USB令牌中获取私钥,那么为什么我们在java代码中调用KeyStore.getKey(alias,password)

我做过类似的事情,其中​​ks是我的KeyStore对象。

PrivateKey privateKey=(PrivateKey)ks.getKey(alias,pass.toCharArray());

然后打印privateKey我得到以下值。

  {algorithm: "RSA", encoded: null, format: null}

任何人都可以解释这一步的必要性,以及在我们使用USB令牌对文档进行数字签名时它会做什么?

1 个答案:

答案 0 :(得分:1)

PrivateKey是一个接口,实现取决于加密提供程序。

在您的情况下,对于USB令牌,提供程序(可能是Sun pkcs#11)在执行加密操作时将pkcs11命令封装到令牌中。私钥实际上并不包含在您的java服务中,并且命令在令牌上执行

私钥是不可提取的,因此encoded值必须为null。例如,如果您使用Pkcs12密钥库(本地.p12文件),您将看到encoded属性包含以DER格式编码的私钥