XML 파일에서 일부 디지털 서명을하고 있으며 내가 서명 한 XML의 유효성을 검사하려고합니다. 나는 자바 XML 전자 서명 API에서 코드 샘플을 사용하고 있지만이 XML의 서명을 확인할 갈 때 난 그냥coreValidity가 false입니다. XML 디지털 서명 확인
coreValidity이 거짓을 체결 한과 sigValValidity은 무엇이야
사실이다 이것들과 coreValidity가 틀린 이유는 무엇입니까? 무엇을 볼 수 있습니까?
감사
public void verifySignedXML(KeyPair keypair) throws Exception {
String signedFile = "src/test/resources/file.xml";
// Instantiate the document to be validated
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
Document doc = dbf.newDocumentBuilder().parse(
new FileInputStream(signedFile));
// Find Signature element
NodeList nl = doc.getElementsByTagNameNS(XMLSignature.XMLNS,
"Signature");
if (nl.getLength() == 0) {
throw new Exception("Cannot find Signature element");
}
// Create a DOM XMLSignatureFactory that will be used to unmarshal the
// document containing the XMLSignature
XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM");
if (keypair.getPublic() == null) {
log.error("Public key is null");
//TODO throw exception
}
PublicKey key = keypair.getPublic();
// Create a DOMValidateContext and specify a KeyValue KeySelector
// and document context
DOMValidateContext valContext = new DOMValidateContext(
key, nl.item(0));
// unmarshal the XMLSignature
XMLSignature signature = fac.unmarshalXMLSignature(valContext);
// Validate the XMLSignature (generated above)
boolean coreValidity = signature.validate(valContext);
// Check core validation status
if (coreValidity == false) {
System.err.println("Signature failed core validation");
boolean sv = signature.getSignatureValue().validate(valContext);
System.out.println("signature validation status: " + sv);
// check the validation status of each Reference
Iterator<?> i = signature.getSignedInfo().getReferences().iterator();
for (int j = 0; i.hasNext(); j++) {
boolean refValid = ((Reference) i.next()).validate(valContext);
System.out.println("ref[" + j + "] validity status: "
+ refValid);
}
} else {
System.out.println("Signature passed core validation");
}
}
포스트 코드 (일부 URI 체계가 바람직하지 않은 부작용을 일으킬 수 있음)이 규격, 무능력 또는 지정된 알고리즘을 실행하기를 꺼려하거나 URI를 지정 역 참조에 대한 무능력 또는 내키지의 옵션 부분을 구현하는 실패를 포함 . – pedrofb
코드로 업데이트 된 질문 – user3520080
출력에서 "ref [i] validity status : false"와 같은 것을보아야합니다. 여기서 i는 Reference의 색인입니다. 유효성 검사에 실패했습니다. 아마 다이제스트 계산 문제. – Moez