"XADES"서명을 확인하는 Java 웹 응용 프로그램을 만들고 싶습니다.이 응용 프로그램은 원본 파일과 분리 된 서명의 두 파일을 가져야합니다.XADES4j를 사용하여 XADES 서명 유효성 확인
저는 훌륭한 프로젝트 인 XADES4j 라이브러리를 사용하고 있습니다. XADES4j를 사용하면 URI 파일에 대한 참조를 확인하지 않고 서명을 확인하는 방법이 있습니까? XML 서명의 지정된 참조 파일에 액세스 할 수 없기 때문입니다.
참조 유효성 확인을 위해 : 주어진 신호 파일에서 계산 된 다이제스트 값과 서명 파일에서 추출한 digestValue를 비교하려고합니다.
여기 여기에 예외
Exception in thread "main" xades4j.XAdES4jXMLSigException: Error verifying the signature
at xades4j.verification.XadesVerifierImpl.doCoreVerification(XadesVerifierImpl.java:285)
at xades4j.verification.XadesVerifierImpl.verify(XadesVerifierImpl.java:188)
at com.wct.VerifyXades.main(VerifyXades.java:33)
Caused by: org.apache.xml.security.signature.MissingResourceFailureException: The Reference for URI file:/D:/workspace/xades4j-487d7a9bb9e5/data_to_sign/test.txt has no XMLSignatureInput
Original Exception was org.apache.xml.security.signature.ReferenceNotInitializedException: D:\workspace\xades4j-487d7a9bb9e5\data_to_sign\test.txt (Le fichier spécifié est introuvable)
Original Exception was org.apache.xml.security.signature.ReferenceNotInitializedException: D:\workspace\xades4j-487d7a9bb9e5\data_to_sign\test.txt (Le fichier spécifié est introuvable)
Original Exception was org.apache.xml.security.signature.ReferenceNotInitializedException: D:\workspace\xades4j-487d7a9bb9e5\data_to_sign\test.txt (Le fichier spécifié est introuvable)
Original Exception was org.apache.xml.security.utils.resolver.ResourceResolverException: D:\workspace\xades4j-487d7a9bb9e5\data_to_sign\test.txt (Le fichier spécifié est introuvable)
Original Exception was java.io.FileNotFoundException: D:\workspace\xades4j-487d7a9bb9e5\data_to_sign\test.txt (Le fichier spécifié est introuvable)
at org.apache.xml.security.signature.Manifest.verifyReferences(Manifest.java:412)
at org.apache.xml.security.signature.SignedInfo.verify(SignedInfo.java:256)
at org.apache.xml.security.signature.XMLSignature.checkSignatureValue(XMLSignature.java:764)
at org.apache.xml.security.signature.XMLSignature.checkSignatureValue(XMLSignature.java:696)
at xades4j.verification.XadesVerifierImpl.doCoreVerification(XadesVerifierImpl.java:278)
... 2 more
입니다 난에 XAdES 서명을 확인하기 위해 사용하고있는 소스 코드 :
package com.wct;
import java.io.FileInputStream;
import java.security.cert.X509CertSelector;
import java.security.cert.X509Certificate;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import xades4j.providers.CertificateValidationException;
import xades4j.providers.CertificateValidationProvider;
import xades4j.providers.ValidationData;
import xades4j.verification.UnexpectedJCAException;
import xades4j.verification.XAdESVerificationResult;
import xades4j.verification.XadesVerificationProfile;
import xades4j.verification.XadesVerifier;
public class VerifyXades {
public static void main(String[] args) throws Exception {
CertificateValidationProvider certValidator = new CertificateValidationProviderImpl();
XadesVerificationProfile p = new XadesVerificationProfile(certValidator);
p.acceptUnknownProperties(true);
XadesVerifier v = p.newVerifier();
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new FileInputStream("data_signed/detachedTestSignature.xml"));
XAdESVerificationResult vr = v.verify(doc.getDocumentElement(), null);
}
}
class CertificateValidationProviderImpl implements CertificateValidationProvider {
@Override
public ValidationData validate(X509CertSelector certSelector,
Date validationDate, Collection<X509Certificate> otherCerts)
throws CertificateValidationException, UnexpectedJCAException {
return new ValidationData((List<X509Certificate>) otherCerts);
}
}
내가 서명에 새로운 오전/개발을 확인하고 난 안 좋은 경험이 있습니다. 당신은 당신은 무엇이든지의 다이제스트 비교를 수행해서는 안
우리는 서명 생성을 변경할 수 없습니다. 실제로 우리 프로그램은 분리 된 서명과 원본 파일을 가져와야합니다. "ResourceResolver"를 사용하려고하지만 불행히도 "XadesVerifier"는 항상 분리 된 서명에서 파일의 URI를 확인합니다. ResourceResolver resolver = ResourceResolver.getInstance (doc.createAttribute ("URI"), "file :/D : /workspace/xades4j-487d7a9bb9e5/data_to_sign/test11.txt", false)를 인스턴스화하는 데 사용 된 소스 코드입니다.); options.useResourceResolver (resolver); ' – Khalilos
코드를 이해할 수 없습니다. 기존의 결정자를 얻으려고합니다. 실제 URI를 무시하는 논리를 가진 사용자 지정 해결 프로그램을 사용하도록 제안했습니다.실제로 ResourceResolverSpi를 구현하여 ResourceResolver에 전달해야합니다. ResolverLocalFilesystem의 구현을 살펴볼 수 있습니다. – lgoncalves