Документ XML для подписи Java с использованием JSR 105 с закрытым ключом HSM
Мне нужно подписать XML-документ, используя API-интерфейс JSR 105. Я уже разобрался, как это сделать с помощью стандартного провайдера, но теперь мне нужен мой код для поддержки 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?
Спасибо джозеф