Maison > Java > le corps du texte

La vérification de la signature ESig DSS renvoie toujours INDÉTERMINÉ

WBOY
Libérer: 2024-02-22 13:49:06
avant
784 Les gens l'ont consulté

L'éditeur PHP Xinyi vous présente : dans le développement Java, la vérification de la signature ESig DSS renvoie toujours "INDETERMINATE", ce qui peut être dû au fait que la signature est incomplète ou ne peut pas être vérifiée. Ce problème implique généralement des certificats numériques, des algorithmes de signature, etc., et nécessite une inspection minutieuse des données de signature et un processus de vérification. Les solutions incluent la vérification de l'algorithme de signature, de la validité du certificat, de l'intégrité des données de signature, etc. pour garantir que toutes les étapes sont correctes. En résolvant soigneusement les problèmes possibles, vous pouvez résoudre ce problème courant de vérification de signature et garantir la sécurité et l'intégrité des données de votre système.

Contenu de la question

J'essaie d'utiliser la bibliothèque 5.12.1 du service de signature numérique (dss) sponsorisée par la Commission européenne pour vérifier les signatures électroniques des signatures numériques pdf et xml.

Le code que j'ai utilisé est

byte[] binaryPdf = Base64.getDecoder().decode(base64EncodedDocument);
CommonTrustedCertificateSource trustedCertSource = new CommonTrustedCertificateSource();
CertificateVerifier cv = new CommonCertificateVerifier();
cv.setAIASource(new DefaultAIASource());
cv.setOcspSource(new OnlineOCSPSource());
cv.setCrlSource(new OnlineCRLSource());
cv.addTrustedCertSources(trustedCertSource);
DSSDocument document = new InMemoryDocument(binaryPdf, shortFileName);
SignedDocumentValidator documentValidator = SignedDocumentValidator.fromDocument(document);
documentValidator.setCertificateVerifier(cv);
UserFriendlyIdentifierProvider userFriendlyIdentifierProvider = new UserFriendlyIdentifierProvider();
documentValidator.setTokenIdentifierProvider(userFriendlyIdentifierProvider);
Reports reports = documentValidator.validateDocument();
Copier après la connexion

Comme indiqué dans la documentation pdf dss. Mon application obtient toujours l'indication no_certificate_chain_found avec la sous-indication indéterminée (visible dans l'élément certificate de la chaîne de certificat). Il ne parvient pas à trouver l’ancre de confiance. Lorsque j'utilise l'exemple d'application 5.12.1 pour la vérification de la signature et que j'essaie de vérifier le même document, j'obtiens l'indication total_passed attendue. Mon application a accès à Internet. Qu'ai-je fait de mal? Merci!

Solution de contournement

Il existe une différence entre l'exemple d'application et votre code.
L’exemple d’application est livré avec une liste racine de confiance préconfigurée (EU LOTL).
Votre code est livré avec un CommonTrustedCertificateSource vide (c'est-à-dire qu'aucun certificat n'est fiable)

Voir FAQ DSS

Vous devez donc ajouter quelques certificats à CommonTrustedCertificateSource. Si vous validez uniquement les signatures que vous créez, ajoutez votre certificat racine/signature d'autorité de certification aux sources fiables. Si vous souhaitez vérifier une signature tierce, la solution est plus compliquée. Par exemple, vous pouvez extraire tout le contenu certifié d'un PDF et les ajouter à la liste de confiance avant de valider

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal