我有我的应用程序的SSL证书,我想用它来使用iText对PDF文件进行数字签名。证书的扩展名为.cer,由证书签名中心(CA)提供。使用SSL证书签署PDF文件
的问题是,我不能够转换这个.cer证书转换成Java密钥库,其在使用iText库签署PDF是必需的。我有代码是:
此代码显然引发无效的密钥库格式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
@ user1516873:我知道,那是我的问题,我如何将它转换为jks keystore? – Ankit
您不能转换它,您可以使用'keytool'命令(来自JRE或JDK)将x509证书添加到密钥库中,但在这里没有太大帮助,因为下一行,您尝试获取PrivateKey的位置会因NPE而失败。 x509证书不包含且不能包含私钥。 – user1516873