【问题标题】:MakeSignature.signDetached throws IllegalArgumentExceptionMakeSignature.signDetached 抛出 IllegalArgumentException
【发布时间】:2014-11-05 08:09:26
【问题描述】:

同时使用MakeSignature.signDetached 使用 LUNA HSM 1700 将数字签名应用于 PDF。

请指导我解决此问题。

提前致谢。

方法如下:

public static void Digital_signed(String SRC,String DEST) 
throws IOException, GeneralSecurityException, DocumentException , Exception{
    try {
        char[] pkcs11PIN = "devicepassword".toCharArray();
        Provider p = null;
        FileInputStream fis = new FileInputStream(configFileName);
        p = new SunPKCS11(fis);
        String provide_name =p.getName();
        Security.addProvider(p);
        KeyStore ks =  KeyStore.getInstance("PKCS11","SunPKCS11-Luna");
        ks.load(null, pkcs11PIN);
        String alias = (String)ks.aliases().nextElement();
        PrivateKey pk = (PrivateKey) ks.getKey(alias, pkcs11PIN);
        Certificate[] chain = ks.getCertificateChain(alias);
        TSAClient tsaClient = null;
        for (int i = 0; i < chain.length; i++) {
            X509Certificate cert = (X509Certificate)chain[i];
            String tsaUrl = CertificateUtil.getTSAURL(cert);
            if (tsaUrl != null) {
                tsaClient = new TSAClientBouncyCastle(tsaUrl);
                break;
            }
        }

        List <CrlClient> crlList = new ArrayList<CrlClient>();

        PdfReader reader = new PdfReader(SRC);
        FileOutputStream os = new FileOutputStream(DEST);
        PdfStamper stamper = PdfStamper.createSignature(reader, os, '\0');
        PdfSignatureAppearance appearance = stamper.getSignatureAppearance();
        appearance.setVisibleSignature(new Rectangle(700, 820, 760, 780), 1, "sig");
        ExternalSignature pks = new PrivateKeySignature(pk,  DigestAlgorithms.SHA256, provide_name);
        ExternalDigest digest = new BouncyCastleDigest();

        MakeSignature.signDetached(appearance, digest, pks, chain, crlList, null, tsaClient, 0, CryptoStandard.CMS);
    }  
    catch(Exception e)
    {}
    finally{ }
}

错误如下:

java.lang.IllegalArgumentException:名称'iText? 5.5.0 ?2000-2013 iText Group NV (AGPL-version) (AGPL-version) (AGPL-version) (AGPL-version) (AGPL-version) (AGPL-version) (AGPL-version)'太长( 143 个字符)。

【问题讨论】:

  • 这是使用 AGPL 版本的 iText 所固有的。许可版本不显示此行为。
  • 谢谢布鲁诺,没有授权版本是否可以解决问题?
  • 您是否有不使用许可版本的具体原因?这种许可证的成本没有 HSM 的成本高。
  • 再次感谢您的即时回复,您完全正确,我已经向 iText 销售团队发送了询问。我提出问题的原因是我想在我们之前运行代码没有错误购买许可证。
  • 我们已经发布了 iText 5.5.3,它在 AGPL 版本中修复了这个问题。

标签: java pdf-generation itext digital-signature hsm


【解决方案1】:

您使用的 iText 版本中的 Version 类存在问题。我们现在有synchronized 的操作,从 iText 5.5.3 开始,问题应该已经消失了。如果没有:请告诉我,我们会再看看这个问题。

【讨论】:

    猜你喜欢
    • 2014-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    相关资源
    最近更新 更多