Heim >Java >Die ESig DSS-Signaturüberprüfung gibt immer UNBESTIMMT zurück

Die ESig DSS-Signaturüberprüfung gibt immer UNBESTIMMT zurück

WBOY
WBOYnach vorne
2024-02-22 13:49:06792Durchsuche

PHP-Editor Xinyi stellt Ihnen vor: In der Java-Entwicklung gibt die ESig DSS-Signaturüberprüfung immer „INDETERMINATE“ zurück, was daran liegen kann, dass die Signatur unvollständig ist oder nicht überprüft werden kann. Dieses Problem betrifft normalerweise digitale Zertifikate, Signaturalgorithmen usw. und erfordert eine sorgfältige Prüfung der Signaturdaten und des Überprüfungsprozesses. Zu den Lösungen gehört die Überprüfung des Signaturalgorithmus, der Gültigkeit des Zertifikats, der Integrität der Signaturdaten usw., um sicherzustellen, dass alle Schritte korrekt sind. Durch die sorgfältige Fehlerbehebung möglicher Probleme können Sie dieses häufig auftretende Problem bei der Signaturüberprüfung lösen und die Datensicherheit und -integrität Ihres Systems gewährleisten.

Frageninhalt

Ich versuche, die von der Europäischen Kommission gesponserte Digital Signature Service (dss)-Bibliothek 5.12.1 zu verwenden, um elektronische Signaturen von digitalen Signaturen im PDF- und XML-Format zu überprüfen.

Der Code, den ich verwendet habe, ist

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

Wie im DSS-Dokumentations-PDF erwähnt. Meine Anwendung erhält immer die Angabe „no_certificate_chain_found“ mit der unbestimmten Unterangabe (sichtbar im Zertifikatselement der Zertifikatskette). Der Vertrauensanker kann nicht gefunden werden. Wenn ich die Beispielanwendung 5.12.1 zur Signaturüberprüfung verwende und versuche, dasselbe Dokument zu überprüfen, erhalte ich die erwartete Angabe „total_passed“. Meine Anwendung hat Zugriff auf das Internet. Was habe ich falsch gemacht? Danke!

Problemumgehung

Es gibt einen Unterschied zwischen der Beispielanwendung und Ihrem Code.
Die Beispielanwendung wird mit einer vorkonfigurierten Liste vertrauenswürdiger Stammverzeichnisse (EU LOTL) geliefert.
Ihr Code enthält ein leeres CommonTrustedCertificateSource (d. h. es ist kein Zertifikat vertrauenswürdig)

Siehe DSS-FAQ

Sie müssen also einige Zertifikate zu CommonTrustedCertificateSource hinzufügen. Wenn Sie nur von Ihnen erstellte Signaturen validieren, fügen Sie Ihr CA-Stamm-/Signaturzertifikat zu „Vertrauenswürdige Quellen“ hinzu. Wenn Sie eine Signatur eines Drittanbieters überprüfen möchten, ist die Lösung komplizierter. Sie können beispielsweise alle zertifizierten Inhalte aus einem PDF extrahieren und sie vor der Validierung zur vertrauenswürdigen Liste hinzufügen

Das obige ist der detaillierte Inhalt vonDie ESig DSS-Signaturüberprüfung gibt immer UNBESTIMMT zurück. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen