尽管usb令牌的privateKey不可访问,但为什么我们在Java中使用keystore.getKey()来进行数字签名pdf

问题描述:

根据所有的读数,我发现在使用USB令牌(HSM)时,我们无法获取私有密钥从USB令牌,那么为什么我们在java代码中调用KeyStore.getKey(alias,password)尽管usb令牌的privateKey不可访问,但为什么我们在Java中使用keystore.getKey()来进行数字签名pdf

我做了这样的事情,其中​​ks是我的KeyStore对象。

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

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

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

任何人能解释这一步的需要,它会做什么,而我们数字签名使用USB令牌的文件?

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

就你而言,对于USB令牌,提供者(可能是Sun pkcs#11)在执行加密操作时将pkcs11命令封装到令牌。私钥没有真正包含在您的Java服务中,并且命令在令牌上执行

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