尽管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格式编码的私钥