Ich versuche digitale Signatur zu PDF-Dokument mit PDF-Box-Bibliothek (v2.0.8) hinzufügen. Ich erhalte bereits signierte Inhalte von einem Webservice (nur mit privatem Schlüssel signiert). Jetzt müsste ich diesen signierten Daten Zertifikatsinformationen zuordnen, damit sie zum PDF-Dokument hinzugefügt werden können. Wie können wir bereits signierten Inhalten ein Zertifikat hinzufügen, vorzugsweise mit Hüpfburg-API?Wie können Zertifikatsinformationen mit bereits signierten Daten verknüpft werden?
// here content is data which has to be signed
public byte[] sign(InputStream content) throws IOException {
try {
CMSSignedDataGenerator gen = new CMSSignedDataGenerator();
List<Certificate> certList = new ArrayList<Certificate>();
certList.add(certificate);
Store certs = new JcaCertStore(certList);
gen.addCertificates(certs);
CMSProcessableInputStream msg = new CMSProcessableInputStream(signPrivate(content));
CMSSignedData signedData = gen.generate(msg, false);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DEROutputStream dos = new DEROutputStream(baos);
dos.writeObject(signedData.toASN1Structure());
return baos.toByteArray();
} catch (Exception e) {
throw new IOException(e);
}
}
Hier kann ich digitale Signatur generieren, aber es enthält keine Zertifikatsinformationen. Ich überprüfte bereits this und this Frage, aber sie nehmen nicht den Fall, in dem Inhalt bereits unter Verwendung des privaten Schlüssels seperatly unterzeichnet wird und nur das Zertifikat verbunden werden muss.
In allen ernst zu nehmenden CMS-Signaturprofilen benötigen Sie die fraglichen Zertifikate * bevor * die Signaturen erstellt werden, da eine Referenz auf das fragliche Zertifikat Teil der signierten Daten ist. – mkl
@mkl, meinst du zu sagen, dass wir das Zertifikat später nicht zuordnen können und es nur zum Zeitpunkt der Signierung von Inhalten mit privatem Schlüssel möglich ist? –