Pdf C5_06_验证ELTV错误

Pdf C5_06_验证ELTV错误,pdf,itext,digital-signature,Pdf,Itext,Digital Signature,我对C5_06_ELTV课程有问题 我遵循了关于Pades LTV文件的所有建议,但当我验证时,出现以下错误: 该文件无法验证 证书未使用提供的密钥进行验证 我一直在使用itextpdf-5.5.0 Adobe Reader说所有签名都是LTV启用的,但我无法通过LTV验证 我附上一份样本文件: 附上此示例: public static void main(String[] args) throws IOException, GeneralSecurityException { Boun

我对C5_06_ELTV课程有问题

我遵循了关于Pades LTV文件的所有建议,但当我验证时,出现以下错误:

该文件无法验证 证书未使用提供的密钥进行验证

我一直在使用itextpdf-5.5.0

Adobe Reader说所有签名都是LTV启用的,但我无法通过LTV验证

我附上一份样本文件:

附上此示例:

public static void main(String[] args) throws IOException, GeneralSecurityException {
    BouncyCastleProvider provider = new BouncyCastleProvider();
    Security.addProvider(provider);
    C5_06_ValidateLTV app = new C5_06_ValidateLTV();
    System.out.println(EXAMPLE1);
    app.validate(new PdfReader(EXAMPLE1));
    System.out.println();
}



public void validate(PdfReader reader) throws IOException, GeneralSecurityException {
    KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
    ks.load(null, null);
    CertificateFactory cf = CertificateFactory.getInstance("X.509");



    ks.setCertificateEntry((cf.generateCertificate(new FileInputStream(ROOT))).toString(),
            cf.generateCertificate(new FileInputStream(ROOT)));


    CertificateVerifier custom = new CertificateVerifier(null) {
        public List<VerificationOK> verify(X509Certificate signCert,
                X509Certificate issuerCert, Date signDate)
                throws GeneralSecurityException, IOException {
            System.out.println(signCert.getSubjectDN().getName() + ": ALL VERIFICATIONS DONE");
            return new ArrayList<VerificationOK>();
        }
    };

    LtvVerifier data = new LtvVerifier(reader);
    data.setRootStore(ks);
    data.setCertificateOption(CertificateOption.WHOLE_CHAIN);
    data.setVerifier(custom);
    data.setOnlineCheckingAllowed(false);
    data.setVerifyRootCertificate(false);
    List<VerificationOK> list = data.verifySignature();
    try {
        data.verify(list);
    }
    catch(GeneralSecurityException e) {
        System.err.println(e.getMessage());
    }
    System.out.println();
    if (list.size() == 0) {
        System.out.println("The document can't be verified");
    }
    for (VerificationOK v : list)
        System.out.println(v.toString());
}
其中ROOT变量是一个字符串,其中包含证书链的根证书所在的路径。它是一个扩展名为.crt的文件,EXAMPLE1变量是一个字符串,带有pdf签名的路径


谢谢大家

证书链的根证书始终是自签名的。因此,您需要提供至少一个受信任的证书来验证该根证书。。。{…ks.setCertificateEntrycf.GenerateCertificateNewFileInputStreamRoot.toString cf.GenerateCertificateNewFileInputStreamRoot;…LtvVerifier数据=新的LtvVerifierreader;data.setRootStoreks;data.SetCertificateOption CertificateOption.WHOLE_链;data.setVerifiercustom;…list=data.verifySignature;data.verifylist;…其中根变量e是一个字符串,带有证书链的根证书所在的路径。它是一个扩展名为的文件。感谢您的评论谢谢!您同时解决了问题吗?我刚刚尝试下载您的PDF以检查它,但不可能。请尝试使用此链接