【问题标题】:Digitally Sign and timestamp a PDF in java在java中对PDF进行数字签名和时间戳
【发布时间】:2013-07-26 05:32:39
【问题描述】:

我想用 Java 将数字签名附加到 PDF 文件,然后使用受信任的时间戳权威为该文件添加时间戳。

我该怎么做?

【问题讨论】:

    标签: java pdf digital-signature trusted-timestamp


    【解决方案1】:

    DigiStamp 在 SecureTime API 工具包中提供 PDF 签名和时间戳功能,当您 create a free test account 时,您会获得一个链接(并获得对测试服务器的访问权限)。该工具包利用 BouncyCastle 和旧的免费版 iText。

    Qoppa has a newer toolkit 具有一系列 PDF 功能,但需要付费。

    免责声明:我在 DigiStamp 工作

    【讨论】:

      【解决方案2】:

      您可以通过其 HTTP RESTful 接口使用Securo API

      应用的时间戳采用 RFC3161 分离格式,所有时间戳均由欧盟认可的合格认证机构颁发。

      免责声明:securo 的联合创始人

      【讨论】:

        【解决方案3】:

        将带有私钥的数字证书导出到 pfx 文件。

        将 iText 与 BouncyCastle 一起使用:

        Document document = new Document();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        PdfWriter.getInstance(document, baos);
        document.open();
        document.add(new Paragraph("Hello World!"));
        document.close();
        
        
            PdfReader reader = new PdfReader(baos.toByteArray());
            OutputStream os = new FileOutputStream("c:\\temp\\sign\\test.pdf");
            PdfStamper stamper = PdfStamper.createSignature(reader, os, '\0');
        
            // Creating the appearance
            PdfSignatureAppearance appearance = stamper.getSignatureAppearance();
            appearance.setReason("REASON");
            appearance.setLocation("LOCATION");
        
            appearance.setVisibleSignature(new Rectangle(36, 748, 144, 780), 1, "sig");
        
            Security.addProvider(new BouncyCastleProvider());
        
            FileInputStream fis = new FileInputStream("c:\\ssl\\test.pfx");
            String password = "myPassword";
        
            KeyStore ks = KeyStore.getInstance("pkcs12");
            ks.load(fis, password.toCharArray());
            String alias = ks.aliases().nextElement();
        
            PrivateKey pk = (PrivateKey) ks.getKey(alias, password.toCharArray());
            X509Certificate cert = (X509Certificate) ks.getCertificate(alias);
        
            TSAClient tsc = new TSAClientBouncyCastle("http://timestampserverURL/");
            ExternalDigest digest = new BouncyCastleDigest();
            ExternalSignature signature = new PrivateKeySignature(pk, "SHA-1", "BC");
            MakeSignature.signDetached(appearance, digest, signature, new Certificate[] { cert }, null, null, tsc, 0,
                    CryptoStandard.CMS);
        

        Maven 依赖项:

        <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk15on</artifactId>
            <version>1.49</version>
        </dependency>
        
        <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcmail-jdk15on</artifactId>
            <version>1.49</version>
        </dependency>
        <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bctsp-jdk15on</artifactId>
            <version>1.46</version>
        </dependency>
        
        
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.4.2</version>
        </dependency>
        

        【讨论】:

          猜你喜欢
          • 2010-09-30
          • 1970-01-01
          • 2016-08-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-14
          • 2011-10-15
          • 1970-01-01
          相关资源
          最近更新 更多