網域金鑰儲存庫 (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。
No comment for this article.