2015-02-23 31 views
1

在我的應用程序中,我使用p12證書文件來加密與我正在使用的API交談時的流量。如何從Java系統中讀取p12文件?

對於我的生產環境,我需要從系統而不是從應用程序讀取這些文件。

在Linux上,如何將我的系統中的這些文件從我的應用程序中讀入到我的應用程序中,就像從應用程序中的資源目錄中讀取一樣?

我正在使用Java。

+0

看看這裏:http://stackoverflow.com/questions/18621508/getting-a- privatekey-object-from-a-p12-file-in-java您可以使用流將密鑰加載到KeyStore中。在鏈接的問題中,它們流式傳輸資源,但您應該可以使用任何InputStream。 – 2015-02-23 18:39:46

+0

但是,我現在要做的就是將它從應用程序文件結構中加載。我需要從實際系統中加載它。我也在尋找的答案是系統上它應該放在Linux上的位置。 – 2015-02-23 18:44:45

+0

你嘗試過'FileInputStream'嗎?您應該可以將p12文件放在任何適合您的位置(並且可以訪問) – 2015-02-23 18:47:27

回答

1

我建立了一個快速和骯髒的小班,以顯示我用keytools創建的相對.pfx(P12)的開始。當然,你也可以通過不同的潛在目錄尋找文件,如果有一些可能的地方。

文件結構如下所示:

./bin 
./bin/Test.java 
./bin/Test.class 
./conf 
./conf/myFile.pfx 

下面是測試代碼:

import java.io.*; 
import java.security.*; 

class Test { 
    public static void main(String[] args) { 
    String pass = "password"; 
    try { 
     File file = new File("../conf/myFile.pfx"); 
     InputStream stream = new FileInputStream(file); 
     KeyStore store = KeyStore.getInstance("PKCS12"); 
     store.load(stream, pass.toCharArray()); 
     PrivateKey key = (PrivateKey)store.getKey("example", pass.toCharArray()); 
     System.out.println("Success"); 
    } catch (KeyStoreException kse) { 
     System.err.println("Error getting the key"); 
    } catch (Exception e) { 
     System.err.println("Error opening the key file"); 
     e.printStackTrace(); 
    } 
    } 
}