Xades4j - XML de Vérification de Signature d'erreur - SignaturePolicyNotAvailableException

StackOverflow https://stackoverflow.com//questions/25031633

  •  21-12-2019
  •  | 
  •  

Question

- Je recevoir XML Facture avec Xades NERE signature et j'ai de la contrôler.J'ai donc essayer de le faire avec Xades4j.J'ai corrigé beaucoup d'erreurs, Mais j'ai bloqué sur le message d'erreur:

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)

Code Java pour vérifier la signature :

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

Si nécessaire, je peux poster un extrait de type de fichier XML j'ai essayer de vérifier après anonymisation.

Merci.J'ai regardé et essayé tout ce que j'ai trouvé (sur le net, xades4j exemple, xades4j junit classe...) mais rien ne semble pouvoir résoudre mon erreur.

Était-ce utile?

La solution

Vous devez spécifier votre propre document de politique de fournisseur comme ceci: p.withPolicyDocumentProvider().Et vous devez mettre en place votre propre fournisseur de stratégie qui implémente les interfaces SignaturePolicyInfoProvider et SignaturePolicyDocumentProvider.(au moins je l'ai fait de cette façon)

Modifier à votre commentaire:

Vous avez besoin de mettre en œuvre SignaturePolicyInfoProvider.getSignaturePolicyDocumentStream(), qui renvoie un InputStream.Cela peut être un FileInputStream

Exemple:

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
        }
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top