Different types of keystore in Java -- DKS

  Pi Ke        2015-01-20 02:27:27       13,761        0          English  简体中文  繁体中文  ภาษาไทย  Tiếng Việt 

網域金鑰儲存庫 (DKS) 是一個金鑰儲存庫的金鑰儲存庫。它將多個金鑰儲存庫抽象化為單一邏輯金鑰儲存庫。它本身實際上並不是一個金鑰儲存庫。這種新的金鑰儲存庫類型是在 Java 8 中引入的。有一個新的類別 DomainLoadStoreParameter 與 DKS 密切相關。

若要將不同的金鑰儲存庫載入單一邏輯金鑰儲存庫,需要一些組態。以下是群組不同金鑰儲存庫的組態格式。

domain  [ ...] {
         keystore  [ ...] ;
         ...
};

以下是網域 domain 的一個範例組態。

domain app1 {
     keystore app1-truststore
         keystoreURI="file:///app1/etc/truststore.jks";

     keystore system-truststore
         keystoreURI="${java.home}/lib/security/cacerts";

     keystore app1-keystore
         keystoreType="PKCS12"
         keystoreURI="file:///app1/etc/keystore.p12";
 };

此組態定義一個網域 app1,其中包含三個金鑰儲存庫。每個包含的金鑰儲存庫 (app1-truststore、system-truststore、app1-keystore) 都指定了 keystoreName。請注意,keystoreName 對於每個項目都必須唯一。

在 keystoreName 之後是一組金鑰儲存庫的屬性。這些屬性包括 keystoreURI、keystoreType、keystoreProviderName、keystorePasswordEnv、entryNameSeparator。屬性名稱不言自明。

載入 DKS 金鑰儲存庫時,會建立一個 DomainLoadStoreParameter 物件並傳遞給 KeyStore.load()。以下是載入 DKS 金鑰儲存庫的範例程式碼片段。

Map<String, KeyStore.ProtectionParameter> PASSWORDS =
        new HashMap<String, KeyStore.ProtectionParameter>() {{
            put("keystore",
                new KeyStore.PasswordProtection("test123".toCharArray()));
            put("policy_keystore",
                new KeyStore.PasswordProtection(
                    "Alias.password".toCharArray()));
            put("pw_keystore",
                new KeyStore.PasswordProtection("test12".toCharArray()));
            put("eckeystore1",
                new KeyStore.PasswordProtection("password".toCharArray()));
            put("eckeystore2",
                new KeyStore.PasswordProtection("password".toCharArray()));
            put("truststore",
                new KeyStore.PasswordProtection("changeit".toCharArray()));
            put("empty",
                new KeyStore.PasswordProtection("passphrase".toCharArray()));
}};
URI config = new URI(CONFIG + "#system");
KeyStore keystore = KeyStore.getInstance("DKS");
keystore.load(new DomainLoadStoreParameter(config, PASSWORDS));

config 是 DKS 金鑰儲存庫的組態路徑,PASSWORDS 是包含組態檔案中定義的金鑰儲存庫的對應密碼的映射。

DKS 也支援載入 InputStream,在此情況下,InputStream 必須是具有 JKS 或 KeyStore.getDefaultType() 金鑰儲存庫類型的單一金鑰儲存庫串流。例如,以下程式碼片段將使用 DKS 載入 JKS 金鑰儲存庫。

char[] PASSWORD = <PASSWORD>;
KeyStore keyStore = KeyStore.getInstance("DKS");, 
keyStore.load(new FileInputStream("keystore.jks"), PASSWORD);

載入金鑰儲存庫後,其他金鑰儲存庫操作與其他金鑰儲存庫類型(例如 JKS)相同。有關建立金鑰和憑證的操作,請閱讀 Java 中不同類型的金鑰儲存庫 -- JKS

JAVA  KEYSTORE  DKS  TUTORIAL 

       

  RELATED


  0 COMMENT


No comment for this article.



  RANDOM FUN

Why no traffic coming in? Damm