Frage

Ich erhalte eine XML-Rechnung mit Xades EPES-Signatur und muss sie kontrollieren.Also versuche ich das mit Xades4j zu machen.Ich habe viele Fehler behoben, bin aber beim Fehler geblieben:

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)

Verwendung von Java-Code zur Überprüfung der Signatur:

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);

Bei Bedarf kann ich einen Auszug aus einer Art XML-Datei posten, die ich nach der Anonymisierung zu überprüfen versuche.

Danke.Ich habe alles gesucht und ausprobiert, was ich gefunden habe (im Internet, xades4j-Beispiel, xades4j-Junit-Klasse ...), aber nichts scheint meinen Fehler zu beheben.

War es hilfreich?

Lösung

Sie müssen Ihren eigenen Richtliniendokumentanbieter wie folgt angeben: p.withPolicyDocumentProvider().Und Sie müssen Ihren eigenen Richtlinienanbieter implementieren, der die Schnittstellen implementiert SignaturePolicyInfoProvider Und SignaturePolicyDocumentProvider.(zumindest habe ich es so gemacht)

Bearbeiten Sie Ihren Kommentar:

Sie müssen umsetzen SignaturePolicyInfoProvider.getSignaturePolicyDocumentStream(), was ein zurückgibt InputStream.Dies kann ein sein FileInputStream

Beispiel:

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
        }
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top