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.
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();
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!
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!