PDF文件验证例外 [英] PDF document verify exception

查看:167
本文介绍了PDF文件验证例外的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我尝试验证签名的pdf文档时,我得到RuntimeException:

When I try to verify signed pdf document I get RuntimeException:

Exception in thread "main" java.lang.RuntimeException: algorithm identifier 1.2.398.3.10.1.1.1.1 in key not recognised
at org.bouncycastle.jce.provider.JDKKeyFactory.createPublicKeyFromPublicKeyInfo(Unknown Source)
at org.bouncycastle.jce.provider.X509CertificateObject.getPublicKey(Unknown Source)
at com.itextpdf.text.pdf.PdfPKCS7.<init>(PdfPKCS7.java:582)
at com.itextpdf.text.pdf.PdfPKCS7.<init>(PdfPKCS7.java:421)
at com.itextpdf.text.pdf.AcroFields.verifySignature(AcroFields.java:2307)
at Main.verifyPDF(Main.java:62)
at Main.main(Main.java:90)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

我的验证代码如下所示:

my verification piece of code looks like this:

    public static boolean verifyPDF(String fileToVerify, KeyStore trustedStore, CRL crl) throws IOException, GeneralSecurityException {
    List<CRL> crls = null;
    if (crl != null) {
        crls = new ArrayList<CRL>(1);
        crls.add(crl);
    }
    boolean result = false;
    PdfReader checker = new PdfReader(fileToVerify);
    AcroFields af = checker.getAcroFields();
    ArrayList<String> names = af.getSignatureNames();

    for (int k = 0; k < names.size(); ++k) {
        String name = (String) names.get(k);
        System.out.println("Signature: " + name);
        com.itextpdf.text.pdf.PdfPKCS7 pk = af.verifySignature(name, "KALKAN");
        result = pk.verify();
        System.out.println("Signer certificate DN: " + pk.getSigningCertificate().getSubjectDN());
        Calendar cal = pk.getSignDate();
        X509Certificate pkc[] = (X509Certificate[]) pk.getSignCertificateChain();
        System.out.println("Document modified: " + !result);
        Object fails[] = PdfPKCS7.verifyCertificates(pkc, trustedStore, crls, cal);
        if (fails == null)
            System.out.println("Certificates verified against the KeyStore");
        else
            System.out.println("Certificate failed: " + fails[1]);
    }
    return result;
}

此字符串发生异常:

com.itextpdf.text.pdf.PdfPKCS7 pk = af.verifySignature(name, "KALKAN");

我使用修补的iText库。我不得不修补它,因为没有像ECGOST34310这样的算法,我只是添加了它。签名以通常的方式执行,没有问题。
请帮忙!

I use patched iText library. I had to patch it because there was no algorithm like ECGOST34310 and I just added it. Signing is performed in usual way, there is no problem with it. Please help!

谢谢。

推荐答案

乍一看OID 1.2.398.3 .10.1.1.1.1似乎由哈萨克斯坦当局定义(参见本页),与父母OID所代表的GOST 34,310-2.004相关,尚未包含在主流BouncyCastle发行版中,参见 BouncyCastle规范

At first glance that OID 1.2.398.3.10.1.1.1.1 seems to be defined by a Kazakh authority (cf. this page), related to GOST 34,310-2.004 represented by the parent OID, without having yet been included in the mainstream BouncyCastle distribution, cf. the BouncyCastle specifications.

因此,就像你已经扩展iText以便能够签署使用GOST 34,310-2.004

Thus, just like you have extended iText to be able to sign using GOST 34,310-2.004


我使用修补的iText库。我不得不打补丁,因为没有类似ECGOST34310的算法,我只是添加了它。

I use patched iText library. I had to patch it because there was no algorithm like ECGOST34310 and I just added it.

你必须扩展它(或者在这里更确切地说,iText使用的加密库BouncyCastle能够使用GOST 34,310-2.004 验证签名。但是,也许其他人已经这样做了并提出了帮助?

you have to extend it (or in this case more exactly the crypto library BouncyCastle used by iText) to be able to verify signatures using GOST 34,310-2.004. Maybe, though, someone else already has done that and comes forth to help?

顺便说一下,如果你在工作时尽快分享结果会很棒。

By the way, it would be great if you shared the results as soon as they work.

所有人都说我不知道​​在ISO 32000-1或PAdES集成环境中提到GOST PDF签名。因此,使用GOST进行PDF签名可能会导致非常有限的互操作性。

That all been said I am not aware of GOST being mentioned in the context of either ISO 32000-1 or PAdES integrated PDF signatures. Using GOST for PDF signatures, therefore, will likely result in very limited interoperability.

这篇关于PDF文件验证例外的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆