使用小程序从令牌中检索私钥



我有一个小程序,它读取证书,因此读取usb令牌中的公钥和私钥。每当插入令牌时,我都可以读取并访问PrivateKey,但我有一个加密的环境,需要将证书和密钥发布到servlet,这个servlet将在我的应用程序上对所选文件进行签名。它运行得很好,直到我得到了这个带有不可导出私钥的代币。

PrivateKey privateKey = (PrivateKey) keyStore.getKey(alias, PIN.toCharArray());

然后我使用解码器将字节数组转换为BASE64并发布

sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder();
String base64encoded = encoder.encode(privateKey.getEncoded());

然而,使用这个特定的令牌,在privateKey.getEncoded()上使用的方法getEncoded)总是返回null。所以我没有找到从PrivateKey对象获取字节数组的方法。

有可能的方法吗?

您无法从PKCS11令牌中获取私钥,PKCS11用于在安全设备中拥有密钥材料,并且无法提取,当您想要使用此类设备(HSM、智能卡等)进行签名时,签名会在其中执行。

如果要使用客户端PKCS11 usb令牌和小程序执行签名,则必须在客户端机器中执行的小程序中执行签名,而不是在服务器端通过密钥进行签名,因为此选项是不可能的。

希望这有帮助,

最新更新