我有我的應用程序的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