středa 17. října 2007

Digitálně podepsané PDF

OpenOffice.org podporuje podepisování dokumentů, které jsou v jeho výchozím formátu (Open Document), ale nepodporuje digitální podpisy při exportu do PDF. Koumal jsem jak si s tím poradit a našel jsem možnost, udělat si utilitku v Javě pomocí knihovny iText. Nejlepší by asi bylo naimplementovat to přímo jako modul do OpenOffice.org, ale na to momentálně nemám čas. :-)

final KeyStore ks = KeyStore.getInstance("pkcs12");
ks.load(
  new FileInputStream(
    "exported_certificate.pfx"),
    "cert_password".toCharArray());

final String alias = (String) ks.aliases().nextElement();
final PrivateKey key = (PrivateKey) ks.getKey(alias,
  "cert_password".toCharArray());
final Certificate[] chain = ks.getCertificateChain(alias);
final PdfReader reader = new PdfReader("original.pdf");
final FileOutputStream fout = new FileOutputStream("signed.pdf");

final PdfStamper stp =
  PdfStamper.createSignature(reader, fout, '\0');
final PdfSignatureAppearance sap = stp.getSignatureAppearance();

sap.setCrypto(key, chain, null, PdfSignatureAppearance.WINCER_SIGNED);
sap.setReason("I'm paranoid.");
sap.setLocation("Wien");

stp.close();

Žádné komentáře: