我需要使用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
我google了一下,发现,XML签名中使用的提供程序必须具有JSR 105扩展名,但SunPkcs11似乎没有。如果它有一个,它会工作。
有谁知道,如何使用opensource或Java / Oracle提供的代码解决这种情况?
谢谢Josef