2

我需要使用 JSR 105 api 签署 XML 文档。我已经想出了如何使用标准提供程序来做到这一点,但现在我需要我的代码来支持 HSM。这是问题。

如果我像这样初始化签名:

 XMLSignatureFactory fac;
 fac = XMLSignatureFactory.getInstance("DOM");

如果我使用通过 HSM(SunPKCS11 提供者)获得的私钥,我会收到此异常/错误:

my.exception.InternalServerErrorException: Internal server
error: Create signature problem
Caused by: javax.xml.crypto.dsig.XMLSignatureException: 
java.security.InvalidKeyException: No installed provider supports this key: sun.security.pkcs11.P11Key$P11PrivateKey
at
org.apache.jcp.xml.dsig.internal.dom.DOMXMLSignature.sign(DOMXMLSignature.java:411) ~[xmlsec-1.5.7.jar:1.5.7]

如果我用 SunPkcs11 提供者初始化签名工厂,这样:

XMLSignatureFactory fac;
fac = XMLSignatureFactory.getInstance("DOM", provider);

我得到了这个例外:

Caused by: javax.xml.crypto.NoSuchMechanismException: java.security.NoSuchAlgorithmException: no such algorithm: DOM for provider SunPKCS11-SunPKCS11

我搜索了一下,发现 XML 签名中使用的提供程序必须具有 JSR 105 扩展名,但 SunPkcs11 似乎没有。如果它有一个,它会工作。

有谁知道,如何使用开源或 Java / Oracle 提供的代码来解决这种情况?

谢谢你,约瑟夫

4

0 回答 0