我正在尝试验证 xml 签名
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/1999/WD-xml-c14n-19991115"/>
但我得到一个例外:
javax.xml.crypto.MarshalException: java.security.NoSuchAlgorithmException: no such algorithm: http://www.w3.org/TR/1999/WD-xml-c14n-19991115 for provider XMLDSig
我不喜欢更改 xml 输入的选项。看起来实现一些自定义规范化方法或强制 java 使用其他方法要好得多,但我不知道该怎么做。
final NodeList signatureNodeList = document.getElementsByTagName(SIGNATURE_TAG_NAME);
if (signatureNodeList.getLength() == 0)
return false;
for(int i = 0; i < signatureNodeList.getLength(); i++){
final DOMValidateContext validateContext = new DOMValidateContext(
new KeyValueKeySelector(), signatureNodeList.item(i));
final XMLSignature signature = xmlSignatureFactory.unmarshalXMLSignature(
validateContext);
if(!signature.validate(validateContext))
return false;
}