根据所有读数,我发现,在使用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令牌对文档进行数字签名时它会做什么?
答案 0 :(得分:1)
PrivateKey是一个接口,实现取决于加密提供程序。
在您的情况下,对于USB令牌,提供程序(可能是Sun pkcs#11)在执行加密操作时将pkcs11命令封装到令牌中。私钥实际上并不包含在您的java服务中,并且命令在令牌上执行
私钥是不可提取的,因此encoded
值必须为null。例如,如果您使用Pkcs12密钥库(本地.p12文件),您将看到encoded
属性包含以DER格式编码的私钥