【问题标题】:Using SSL certificate for signing PDF files使用 SSL 证书签署 PDF 文件
【发布时间】:2013-04-08 09:33:59
【问题描述】:

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

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

这段代码明显抛出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 密钥库并将其用于签署 pdf 文件。

【问题讨论】:

  • abc.cer 是 x509 证书,但您尝试将其作为 jks 密钥库打开。
  • @user1516873:我知道,这是我的问题,如何将其转换为 jks 密钥库?
  • 您无法转换它,您可以使用keytool 命令(来自 JRE 或 JDK)将 x509 证书添加到密钥库,但这里没有太多帮助,因为下一行,您尝试获取 PrivateKey NPE 将失败。 x509 证书不包含也不能包含私钥。
  • 好的,私钥是指为从CA获取这个.cer证书而生成的.keystore和.csr文件吗?如果是,我也有。
  • .csr - 证书请求。这里没有关系,算了。 .keystore - 也许这是你需要的。使用 keytool 查看它并检查它是否有私钥。像这样的东西:keytool -v -list -keystore path_to_keystore.keystore 你应该得到这样的东西:Keystore type: JKS Keystore provider: SUN Your keystore contains 1 entry Alias name: sslcert Creation date: Mar 22, 2013 Entry type: PrivateKeyEntry

标签: java itext keystore digital-certificate


【解决方案1】:

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

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

【讨论】:

  • 如何检查我拥有的证书类型。我正在为 apache Web 服务器(https 网站)使用 .cer 证书。私钥是指为从 CA 获取此 .cer 证书而生成的 .keystore 和 .csr 文件吗?
  • @Ankit 检查证书中的 KeyUsage 和 ExtendedKeyUsage 字段。
  • KeyUsage :数字签名,密钥加密 (a0)。 ExtendedKeyUsage 没有任何内容。
  • 我如何获得用于签署和证明文件的证书?这些是什么类型的证书?
  • @Ankit 您需要检查证书颁发机构站点的 PDF 签名证书,它们是这样调用的。
猜你喜欢
  • 1970-01-01
  • 2014-05-15
  • 1970-01-01
  • 2014-12-30
  • 2021-08-03
  • 2015-12-19
  • 2015-09-12
  • 2020-03-21
  • 2017-11-28
相关资源
最近更新 更多