java - 使用 SSL 证书签署 PDF 文件

标签 java itext keystore digital-certificate

我的应用程序有一个 SSL 证书,我想使用它通过 iText 对 PDF 文件进行数字签名。证书的扩展名为 .cer,由证书签名机构 (CA) 提供。

问题是我无法将此 .cer 证书转换为使用 itext 库签署 PDF 时所需的 java keystore 。我的代码是:

此代码显然会抛出 Invalid keystore format IOException。

KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(new FileInputStream("C:\\abc.cer"), "abcd".toCharArray());
String alias = (String) ks.aliases().nextElement();
PrivateKey key = (PrivateKey) ks.getKey(alias, "abcd".toCharArray());
java.security.cert.Certificate[] chain = ks.getCertificateChain(alias);
PdfReader reader = new PdfReader("C:\\test.pdf");
FileOutputStream fout = new FileOutputStream("C:\\signed.pdf");
PdfStamper stp = PdfStamper.createSignature(reader, fout, '\0');
PdfSignatureAppearance sap = stp.getSignatureAppearance();
sap.setCrypto(key, chain, null, PdfSignatureAppearance.WINCER_SIGNED);
sap.setReason("Test Reason");
sap.setLocation("Test Location");
sap.setVisibleSignature(new Rectangle(10, 10, 20, 20), 1, null);
stp.close();

请告诉我如何将 SSL 证书转换为 java keystore 并将其用于签署 pdf 文件。

最佳答案

首先,证书不是“SSL证书”。它们是 x.509 证书,其中一些可用于 SSL/TLS 身份验证。如果您拥有此类证书,则不能将其用于其他目的,包括 PDF 签名。

接下来,.cer 文件是证书的公共(public)部分,它不包含私钥。您需要一个证书一个私钥来签署任何东西。

关于java - 使用 SSL 证书签署 PDF 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16029261/

相关文章:

java - Apache POI XSSF 从 RGB 设置 fillForegroundColor

pdf - 使用 itext 将静态 pdf 添加到当前动态生成的 pdf 中

java - HTTPS 上的 Weblogic 服务器 SSL 问题

java - 使用 itext 创建 pdf 的问题

java - 更新-更新 java truststore 中的自签名 CA 证书

java - Websphere Liberty - 如何从 Windows 注册表获取 keystore 密码?

java - jEdit Java - 比较 Eclipse 中的类路径语法以及如何实现

java - 链接方法时不能依赖目标类型

java - 重构 Quartz 作业数据

iText PDFWriter - 如果少数表格行转到新页面,则写入表格标题