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

While privateKey of a usb token is not accessible then Why we use keystore.getKey() in Java for digitally sign a pdf

根据所有阅读资料,我发现,在使用 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 令牌对文档进行数字签名时它会做什么?

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

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

上执行的

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