문제

XML 서명을 검증하려고했습니다.

이에 따른 검증 지도 시간 잘 작동합니다.

그러나 나는 또한 두 번째 접근법을 시도했습니다. 그것을 확인합니다 방법을 확인하십시오 서명 클래스의 I는 XML 파일에서 서명과 인증서를 추출했으며 다음을 수행했습니다.

    public static boolean checkSignedFile(byte[] data, byte[] sigToVerify,
        byte[] cert, String algorithm) throws CertificateException,
        NoSuchAlgorithmException, InvalidKeyException, SignatureException {
    CertificateFactory cf = CertificateFactory.getInstance("X.509");
    Certificate c = (Certificate) cf
            .generateCertificate(new ByteArrayInputStream(cert));
    PublicKey pk = c.getPublicKey();
    Signature sig;
    boolean verifies = false;
    sig = Signature.getInstance(algorithm);
    sig.initVerify(pk);
    sig.update(data);
    verifies = sig.verify(sigToVerify);
    return verifies;
}

결과는 거짓이었습니다. 서명이 확인되지 않았습니다. 그 이유는 무엇입니까?

도움이 되었습니까?

해결책

이렇게 xmldsig를 확인할 수 없습니다. 작동하지 않을 것입니다. 서명은 RAW XML에서 계산되지 않습니다. 그것은 표준화, 다이제스트 등을 거쳐야합니다.

당신은 무엇을 위해 사용합니까? data[]? 올바르게 얻으려면 거의 XMLDSig 라이브러리를 다시 작성해야합니다.

다른 팁

데이터 []가 서명 된 XML 파일의 내용 인 경우 SigToverify는 무엇입니까?

XMLSIG는 서명 할 각 요소의 다이제스트를 포함하는 서명 요소 (signedInfo)를 만듭니다. 그런 다음이 SignedInfo-Elemnt의 다이제스트가 계산되고 서명됩니다.

따라서 SigToverify가 XMLSignature 구현에 의해 생성 된 서명 인 경우 전체 XML 파일의 서명과 같지 않아야합니다.

여기 더 완전한 설명입니다. 그리고 관심이 있다면 사양.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top