Rumah  >  Artikel  >  Pengesahan tandatangan ESig DSS sentiasa mengembalikan TIDAK TERTENTU

Pengesahan tandatangan ESig DSS sentiasa mengembalikan TIDAK TERTENTU

WBOY
WBOYke hadapan
2024-02-22 13:49:06743semak imbas

Editor PHP Xinyi memperkenalkan kepada anda: Dalam pembangunan Java, pengesahan tandatangan ESig DSS sentiasa mengembalikan "INDETERMINATE", yang mungkin disebabkan tandatangan tidak lengkap atau tidak dapat disahkan. Masalah ini biasanya melibatkan sijil digital, algoritma tandatangan, dsb., dan memerlukan pemeriksaan teliti terhadap data tandatangan dan proses pengesahan. Penyelesaian termasuk menyemak algoritma tandatangan, kesahan sijil, integriti data tandatangan, dsb. untuk memastikan semua langkah adalah betul. Dengan menyelesaikan masalah yang mungkin timbul dengan teliti, anda boleh menyelesaikan sakit kepala pengesahan tandatangan biasa ini dan memastikan keselamatan data dan integriti sistem anda.

Kandungan soalan

Saya cuba menggunakan perpustakaan Perkhidmatan Tandatangan Digital (dss) tajaan Suruhanjaya Eropah 5.12.1 untuk mengesahkan tandatangan elektronik tandatangan digital pdf dan xml.

Kod yang saya gunakan ialah

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

Seperti yang ditunjukkan dalam dokumentasi dss pdf. Permohonan saya sentiasa mendapat petunjuk no_certificate_chain_found dengan sub-indikasi tidak tentu (kelihatan dalam elemen sijil rantaian sijil). Ia tidak dapat mencari sauh amanah. Apabila saya menggunakan aplikasi sampel 5.12.1 untuk pengesahan tandatangan dan cuba mengesahkan dokumen yang sama, saya mendapat petunjuk total_passed yang dijangkakan. Aplikasi saya mempunyai akses kepada internet. Apa yang saya buat salah? Terima kasih!

Penyelesaian

Terdapat perbezaan antara aplikasi sampel dan kod anda.
Aplikasi sampel disertakan dengan senarai akar dipercayai yang diprakonfigurasikan (EU LOTL).
Kod anda disertakan dengan CommonTrustedCertificateSource kosong (iaitu tiada sijil dipercayai)

Lihat Soalan Lazim DSS

Jadi anda perlu menambah beberapa sijil pada CommonTrustedCertificateSource. Jika anda hanya mengesahkan tandatangan yang anda buat, tambahkan sijil akar/tandatangan CA anda pada Sumber Dipercayai. Jika anda ingin mengesahkan tandatangan pihak ketiga, penyelesaiannya adalah lebih rumit. Contohnya, anda boleh mengekstrak semua kandungan yang diperakui daripada PDF dan menambahkannya pada senarai yang dipercayai sebelum mengesahkan

Atas ialah kandungan terperinci Pengesahan tandatangan ESig DSS sentiasa mengembalikan TIDAK TERTENTU. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam