我们正在使用 HSM(硬件安全模块)对我们的 java 应用程序进行签名和加密。 我们已使用以下条目使用 java.security 属性文件将 HSM 插入到我们的 JVM 中
security.provider.11=sun.security.pkcs11.SunPKCS11 D:/security/safenet.cfg
这几天都好好的,突然遇到了如下错误。
java.security.SignatureException: RSASignature::engineSign sun.security.pkcs11.P11Key$P11PrivateKey cannot be cast to java.security.interfaces.RSAPrivateKey
我们在谷歌上进行了足够的搜索,但无法确定根本原因。
感谢任何帮助
谢谢
最佳答案
我们也遇到了同样的问题。获取 Signing 实例时指定提供者名称。当调用使用 HSM 进行签名的代码时,应用程序中可能有其他一些代码添加另一个实现相同签名算法的提供程序 [Security.insertProvider]。 当您签名时,您传递 PKCS11 私钥处理程序的参数,但提供程序期望 RSA 的不同 key 处理程序。 解决: 当您获取 HSM 签名实例时,请指定安全提供程序以及签名算法。
关于java - 使用 HSM 和 SUNPKCS11 进行文件签名时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27053407/