Цифровая подпись и временная отметка PDF в Java

Я хотел бы прикрепить цифровую подпись к файлу PDF на Java, а затем поставить метку времени для этого файла с доверенным органом метки времени.

Как мне это сделать?


person DD.    schedule 26.07.2013    source источник


Ответы (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>
person DD.    schedule 26.07.2013

Вы можете использовать Securo API через его HTTP-интерфейс RESTful.

Применяемые временные метки имеют отдельный формат RFC3161, и все временные метки выдаются квалифицированными центрами сертификации, аккредитованными в ЕС.

Отказ от ответственности: соучредитель securo

person mrucci    schedule 27.07.2013

DigiStamp предоставляет функцию подписи PDF и отметки времени в наборе инструментов SecureTime API, вы получаете ссылку на него при создании бесплатный тестовый аккаунт (и получите доступ к тестовым серверам). Инструментарий использует BouncyCastle и старую бесплатную версию iText.

У Qoppa есть более новый набор инструментов с целым рядом функций PDF, но за его использование взимается плата.

Отказ от ответственности: я работаю в DigiStamp

person user2700751    schedule 05.09.2013