Подписах документ. и искам да добавя DSS към моя документ.
Security.addProvider(new BouncyCastleProvider());
File signedDocument = new File("/signed.pdf");
File out = new File("/signed_plus_dss");
byte[] buffer = new byte[8 * 1024];
FileInputStream fis = new FileInputStream(signedDocument);
FileOutputStream fos = new FileOutputStream(out);
int c;
while ((c = fis.read(buffer)) != -1) {
fos.write(buffer, 0, c);
}
fis.close();
fis = new FileInputStream(out);
// load document
PDDocument doc = PDDocument.load(signedDocument);
PDDocumentCatalog catalog = doc.getDocumentCatalog();
COSDictionary catalogDictionary = catalog.getCOSDictionary();
COSDictionary dssDictionary = new COSDictionary();
/* ... I can add OCSP responses, and CRLS, and Certs here
in order to create document LTV, but now I don't need that.
I have another problem, not this... */
/* if that's false, nothing happens */
catalogDictionary.setNeedToBeUpdate(true);
catalogDictionary.setItem(COSName.getPDFName("DSS"), dssDictionary);
/* ... if we add here Document level time stamp, everything is fine.
signature will not be invalid with TSA. but it's invalid without TSA ... */
doc.saveIncremental(fis, fos);
това е. всичко е наред. когато видя PDF Structure има Document Security Store. но когато отворя PDF с adobe reader, подписът ми е невалиден, защото - „Документът е променен или повреден, след като е бил подписан.“ и „1 Разни промени“
но тук се случва нещо интересно - ако добавя Pades-LTV (DSS + TSA), всичко работи:
например, ако добавим тези кодове:
URL tsaURL = new URL(TSAUrl);
PDSignature signature = new PDSignature();
signature.setFilter(PDSignature.FILTER_ADOBE_PPKLITE);
signature.setSubFilter(COSName.getPDFName("ETSI.RFC3161"));
signature.setSignDate(Calendar.getInstance());
TimestampeInt signatureInt = new TimestampeInt(tsaURL, null, null);
doc.addSignature(signature, signatureInterface);
doc.saveIncremental(fis, fos);
според резултата документ ниво време пън работи добре. Но трябва да добавя и само DSS без TSA. как мога да разреша този проблем, какво мислите?
примерни документи: Първата проба е - подпис плюс само DSS. Втората проба е подпис плюс DSS плюс документ на ниво време