2012-04-04 5 views
2

메시지가 변조되었는지 확인하고 유효한 사람이 서명했는지 확인하기 위해 프로그램에서 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); 
    } 

답변

2

를 DOM Node 객체는 전체 XML 문서에 포함 된 요소, 그냥 요소하지 않습니다. Node interface documentation을 보면 getOwnerDocument()이라는 메서드가 있음을 알 수 있습니다. 따라서 DOMValidateContext 개체를 전달한 Node에서 전체 XML 문서에 액세스 할 수 있으므로 해당 문서의 내용 중 Signature 요소 내에서 참조되는 모든 콘텐츠에 액세스 할 수 있습니다.

관련 문제