虽然无法访问 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 格式编码的私钥
根据所有阅读资料,我发现,在使用 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 格式编码的私钥