메시지가 변조되었는지 확인하고 유효한 사람이 서명했는지 확인하기 위해 프로그램에서 ml 서명을 사용하고 있습니다. 내가 이해했던 두 번째 부분. 문제는 첫 부분, 즉 참조 유효성을 검사하는 것입니다. 여기에 제가 사용하고있는 코드가 있습니다. xmldoc
은 xml enveloped 서명을 포함하는 문서 개체입니다.xml 서명의 참조 유효성 확인
NodeList nl = xmldoc.getElementsByTagNameNS
(XMLSignature.XMLNS, "Signature");
DOMValidateContext valContext = new DOMValidateContext
(pbk1, nl.item(0));
볼 수 있듯이 valContext에는 서명 요소와 공개 키 (서명을 확인하는 데 필요함) 만 있습니다. 그러나 아래의 코드에서 valContext
객체를 사용할 경우에만 참조가 유효 함을 알 수 있습니다. 이것이 어떻게 가능한지? 참조 유효성을 검사하려면 <reference>
에서 참조 된 요소를 추출 할 수있는 실제 xmldoc에 액세스 한 다음 해당 값의 해시/다이제스트를 찾아 <digest value>
과 비교해야합니다.
하지만 어떻게 든 아래의 코드가 작동합니다. 어떻게 몰라? 누군가 제발 설명해. 요소의
Iterator i =
signature1.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);
}