문제

XADESPES 서명이있는 XML 인보이스를 받고 제어해야합니다. 그래서 나는 xades4j로 그것을하려고 노력합니다.나는 많은 오류가 없지만 오류에 갇혀있다 :

errxades4j.verification.SignaturePolicyNotAvailableException: Verification failed for property 'SignaturePolicyIdentifier': signature policy document is not available
    at xades4j.verification.SignaturePolicyVerifier.verify(SignaturePolicyVerifier.java:67)
    at xades4j.verification.SignaturePolicyVerifier.verify(SignaturePolicyVerifier.java:38)
    at xades4j.verification.QualifyingPropertiesVerifierImpl.verifyProperties(QualifyingPropertiesVerifierImpl.java:58)
    at xades4j.verification.XadesVerifierImpl.verify(XadesVerifierImpl.java:202)
.

Java 코드 서명을 확인하는 데 사용 :

FileInputStream fis = new FileInputStream("keystore.jks");
KeyStore trustAnchors = KeyStore.getInstance("jks");
trustAnchors.load(fis,"password".toCharArray());
fis.close();

CertificateValidationProvider certValidator = new PKIXCertificateValidationProvider(trustAnchors, false);
XadesVerificationProfile p = new XadesVerificationProfile(certValidator);
XadesVerifier v = p.newVerifier();

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db =  dbf.newDocumentBuilder();
FileInputStream is = new FileInputStream(filename);
Document doc = db.parse(is);

Element sigElem = (Element)doc.getElementsByTagNameNS(Constants.SignatureSpecNS, Constants._TAG_SIGNATURE).item(0);
XAdESVerificationResult r = null;
r = v.verify(sigElem,null);
.

필요한 경우 익명화 후 확인하려고하는 XML 파일의 종류의 추출을 게시 할 수 있습니다.

감사합니다. 나는 내가 발견 한 모든 것을 보았고 시도했다 (그물, xades4j 예, xades4j junit class ...) 아무 것도 내 오류를 해결하는 것 같습니다.

도움이 되었습니까?

해결책

다음과 같이 자신의 정책 문서 공급자를 지정해야합니다. p.withPolicyDocumentProvider(). 그리고 인터페이스를 구현하는 자신의 정책 공급자를 구현해야합니다. SignaturePolicyInfoProviderSignaturePolicyDocumentProvider.(적어도 나는 그렇게했다)

편집에 대한 편집 :

SignaturePolicyInfoProvider.getSignaturePolicyDocumentStream()를 반환하는 InputStream를 구현해야합니다.이것은 FileInputStream

일 수 있습니다

예제 :

public class FilebasedSignaturePolicyProvider implements  SignaturePolicyDocumentProvider {

    @Override
    public InputStream getSignaturePolicyDocumentStream(ObjectIdentifier sigPolicyId) {
        String oid = sigPolicyId.getIdentifier();

        try {
            return new FileInputStream("directory-to-my-policy-files/" + oid);
        } catch (FileNotFoundException e) {
            // handle error
        }
    }
}
.

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