簡體   English   中英

PKCS#12證書使用Java簽名某些數據時出錯

[英]error using PKCS#12 certificate to sign some data with Java

我正在嘗試使用PKCS#12證書對某些數據進行簽名。 我在開發機器上成功簽署了數據,但是將應用程序部署到生產機器后,我遇到了一些問題。

在開發機器中,我有Oracle jdk 1.6.0和centos 6.2,在生產機器中有IBM jdk 1.6.0和IBM AIX。

問題是我無法從加載了證書文件的KeyStore實例中獲取帶有別名的私鑰,似乎KeyStore中沒有條目,而我已經打印了證書中存在的條目使用keytool命令保存文件(因此文件沒有問題),此代碼也可以在開發機器中運行而沒有任何問題。

任何幫助表示贊賞

這是代碼:

KeyStore ks = KeyStore.getInstance("PKCS12");
String certFileAbsPath =  this.getClass().getClassLoader().getResource("").getPath() + File.separator + "file.p12";
File file = new File(certFileAbsPath);
FileInputStream fis = new FileInputStream(file);
ks.load(fis, null);
Enumeration aliasEnum = ks.aliases();
String aliasName = null;
while(aliasEnum.hasMoreElements()){
    aliasName = (String)aliasEnum.nextElement();
    logger.debug("alias: " + aliasName);//nothing is logged!
}

以我的經驗,Java不喜歡沒有密碼的PKCS#12密鑰庫。 在PKCS#12文件上設置一個密碼(不一定要很強,只需使用“ password”即可),並將其作為ks.load的第二個參數提供。

我有一個“ .p12”文件,該文件與應用程序的WAR文件捆綁在一起,並且WAR文件已部署到tomcat中。

換句話說,這是一種資源。 new File()new FileInputStream無法處理資源。 您應該使用Class.getResourceAsStream()

它在開發中有效,因為文件存在於此。 它在生產中不存在。 WAR文件中僅存在資源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM