【发布时间】:2017-12-15 10:06:29
【问题描述】:
我正在尝试使用 pdf-box 库 (v2.0.8) 为 pdf 文档添加数字签名。我正在从网络服务接收已签名的内容(仅使用私钥签名)。现在我需要将证书信息与此签名数据相关联,以便可以将其添加到 PDF 文档中。我们如何将证书添加到已签名的内容中,最好使用 bouncy castle api?
// 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);
}
}
在这里,我可以生成数字签名,但它不包含任何证书信息。我已经检查了this 和this 问题,但他们不接受已经使用私钥单独签署内容并且只需要关联证书的情况。
【问题讨论】:
-
在所有要认真对待的 CMS 签名配置文件中,您需要相关证书在创建签名作为对相关证书的引用是签名数据的一部分。
-
@mkl,你的意思是说我们以后不能关联证书,只能在用私钥签署内容的时候完成?
标签: java digital-signature x509certificate bouncycastle pdfbox