|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object java.security.KeyStore
public class KeyStore
此類別表示密鑰和證書的存儲設施。
KeyStore
管理不同型別的條目。每種型別的條目都實作 KeyStore.Entry
介面。提供了三種基本的 KeyStore.Entry
實作:
此型別的條目保存一個加密的 PrivateKey
,可以選擇用受保護格式存儲該私鑰,以防止未授權存取。它還隨附一個相應公鑰的證書鏈。
給定條目使用私鑰和證書鏈進行自驗證 (self-authentication)。應用此驗證的套件括軟體發佈組織,它們將 JAR 檔案簽章為發佈和/或許可軟體的一部分。
此型別的條目保存一個加密的 SecretKey
,可以選擇用受保護格式存儲該密鑰,以防止未授權存取。
此型別的條目包含一個屬於另一方的單個公鑰 Certificate
。它被稱為可信證書,因為 keystore 的所有者相信證書中的公鑰確實屬於該證書的 subject(所有者)所標識的身份。
此型別的條目可用於驗證其他方。
KeyStore 中的每一條目都用 “alias” 字元串標識。對於私鑰及其關聯的證書鏈,這些字元串用於區分實體驗證自身可以採用的不同方式。例如,實體可以使用不同的證書授權或不同的公鑰演算法來驗證自身。
別名是否區分大小寫與實作有關。為了避免出現問題,建議不要在 KeyStore 中使用只有大小寫區別的別名。
在這裡沒有指定 keystore 是否是持久性的,也沒有指定 keystore 是持久性時所使用的機制。這允許使用各種技術保護敏感的(例如,私有的或秘密的)密鑰。一種選擇是使用智能卡或其他集成加密引擎 (SafeKeyper),也可以(以各種格式)使用檔案之類別更為簡單的機制。
請求 KeyStore 物件的典型方式包括使用預設型別和提供一個特定的 keystore 型別。
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());系統將返回預設型別的 keystore 實作。
KeyStore ks = KeyStore.getInstance("JKS");系統將返迴環境中可用的指定 keystore 型別的首選實作。
必須先載入
keystore 才能對其進行存取。
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); // get user password and file input stream char[] password = getPassword(); java.io.FileInputStream fis = null; try { fis = new java.io.FileInputStream("keyStoreName"); ks.load(fis, password); } finally { if (fis != null) { fis.close(); } }要使用上述
load
方法創建一個空 keystore,傳遞 null
作為 InputStream
的參數。
一旦載入了 keystore,就能夠從 keystore 讀取現有條目,或向 keystore 寫入新條目:
// get my private key KeyStore.PrivateKeyEntry pkEntry = (KeyStore.PrivateKeyEntry) ks.getEntry("privateKeyAlias", password); PrivateKey myPrivateKey = pkEntry.getPrivateKey(); // save my secret key javax.crypto.SecretKey mySecretKey; KeyStore.SecretKeyEntry skEntry = new KeyStore.SecretKeyEntry(mySecretKey); ks.setEntry("secretKeyAlias", skEntry, new KeyStore.PasswordProtection(password)); // store away the keystore java.io.FileOutputStream fos = null; try { fos = new java.io.FileOutputStream("newKeyStoreName"); ks.store(fos, password); } finally { if (fos != null) { fos.close(); } }注意,可以使用相同的密碼載入 keystore、保護私鑰條目、保護秘密密鑰條目以及存儲 keystore(如上文範例程式碼所示),也可以使用不同的密碼或其他保護參數。
PrivateKey
,
SecretKey
,
Certificate
巢狀類別摘要 | |
---|---|
static class |
KeyStore.Builder
將被實例化的 KeyStore 物件的描述。 |
static class |
KeyStore.CallbackHandlerProtection
封裝 CallbackHandler 的 ProtectionParameter。 |
static interface |
KeyStore.Entry
用於 KeyStore 項型別的標記介面。 |
static interface |
KeyStore.LoadStoreParameter
用於 KeyStore load 和 store 參數的標記介面。 |
static class |
KeyStore.PasswordProtection
ProtectionParameter 的一個基於密碼的實作。 |
static class |
KeyStore.PrivateKeyEntry
保存 PrivateKey 和相應證書鏈的 KeyStore 項。 |
static interface |
KeyStore.ProtectionParameter
用於 keystore 保護參數的標記介面。 |
static class |
KeyStore.SecretKeyEntry
保存 SecretKey 的 KeyStore 項。 |
static class |
KeyStore.TrustedCertificateEntry
保存可信的 Certificate 的 KeyStore 項。 |
建構子摘要 | |
---|---|
protected |
KeyStore(KeyStoreSpi keyStoreSpi,
Provider provider,
String type)
創建給定型別的 KeyStore 物件,並在其中封裝給定的提供者實作(SPI 物件)。 |
方法摘要 | |
---|---|
Enumeration<String> |
aliases()
列出此 keystore 的所有別名。 |
boolean |
containsAlias(String alias)
檢查給定別名是否存在於此 keystore 中。 |
void |
deleteEntry(String alias)
刪除此 keystore 中給定別名標識的條目。 |
boolean |
entryInstanceOf(String alias,
Class<? extends KeyStore.Entry> entryClass)
確定指定 alias 的 keystore Entry 是否是指定 entryClass 的實例或子類別。 |
Certificate |
getCertificate(String alias)
返回與給定別名關聯的證書。 |
String |
getCertificateAlias(Certificate cert)
返回證書與給定證書比對的第一個 keystore 條目的別名。 |
Certificate[] |
getCertificateChain(String alias)
返回與給定別名關聯的證書鏈。 |
Date |
getCreationDate(String alias)
返回給定別名標識的條目的創建日期。 |
static String |
getDefaultType()
返回 Java 安全屬性檔案中指定的預設 keystore 型別;如果不存在此類別屬性,則返回字元串 "jks"("Java keystore" 的首字母縮寫)。 |
KeyStore.Entry |
getEntry(String alias,
KeyStore.ProtectionParameter protParam)
使用指定保護參數獲取指定別名的 keystore Entry 。 |
static KeyStore |
getInstance(String type)
返回指定型別的 keystore 物件。 |
static KeyStore |
getInstance(String type,
Provider provider)
返回指定型別的 keystore 物件。 |
static KeyStore |
getInstance(String type,
String provider)
返回指定型別的 keystore 物件。 |
Key |
getKey(String alias,
char[] password)
返回與給定別名關聯的密鑰,並用給定密碼來恢復它。 |
Provider |
getProvider()
返回此 keystore 的提供者。 |
String |
getType()
返回此 keystore 的型別。 |
boolean |
isCertificateEntry(String alias)
如果給定別名標識的條目是通過調用 setCertificateEntry 或者以 TrustedCertificateEntry 為參數的 setEntry 創建的,則返回 true。 |
boolean |
isKeyEntry(String alias)
如果給定別名標識的條目是通過調用 setKeyEntry 或者以 PrivateKeyEntry 或 SecretKeyEntry 為參數的 setEntry 創建的,則返回 true。 |
void |
load(InputStream stream,
char[] password)
從給定輸入串流中載入此 KeyStore。 |
void |
load(KeyStore.LoadStoreParameter param)
使用給定 LoadStoreParameter 載入此 keystore。 |
void |
setCertificateEntry(String alias,
Certificate cert)
將給定可信證書分派給給定別名。 |
void |
setEntry(String alias,
KeyStore.Entry entry,
KeyStore.ProtectionParameter protParam)
用指定別名保存 keystore Entry 。 |
void |
setKeyEntry(String alias,
byte[] key,
Certificate[] chain)
將給定密鑰(已經被保護)分派給給定別名。 |
void |
setKeyEntry(String alias,
Key key,
char[] password,
Certificate[] chain)
將給定的密鑰分派給給定的別名,並用給定密碼保護它。 |
int |
size()
獲取此 keystore 中條目數。 |
void |
store(KeyStore.LoadStoreParameter param)
使用給定 LoadStoreParameter 存儲此 keystore。 |
void |
store(OutputStream stream,
char[] password)
將此 keystore 存儲到給定輸出串流,並用給定密碼保護其完整性。 |
從類別 java.lang.Object 繼承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
建構子詳細資訊 |
---|
protected KeyStore(KeyStoreSpi keyStoreSpi, Provider provider, String type)
keyStoreSpi
- 提供者實作provider
- 提供者type
- keystore 型別。方法詳細資訊 |
---|
public static KeyStore getInstance(String type) throws KeyStoreException
此方法從首選 Provider 開始遍歷已註冊安全提供者列表。返回一個封裝 KeyStoreSpi 實作的新 KeyStore 物件,該實作取自第一個支持指定型別的 Provider。
注意,可以通過 Security.getProviders()
方法獲取已註冊提供者列表。
type
- keystore 型別。有關標準 keystore 型別的資訊,請參閱
Java Cryptography Architecture API Specification & Reference 中的附錄 A。
KeyStoreException
- 如果沒有 Provider 支持指定型別的 KeyStoreSpi 實作。Provider
public static KeyStore getInstance(String type, String provider) throws KeyStoreException, NoSuchProviderException
返回一個封裝 KeyStoreSpi 實作的新 KeyStore 物件,該實作取自指定提供者。指定提供者必須在安全提供者列表中註冊。
注意,可以通過 Security.getProviders()
方法獲取已註冊提供者列表。
type
- keystore 型別。有關標準 keystore 型別的資訊,請參閱
Java Cryptography Architecture API Specification & Reference 中的附錄 A。provider
- 提供者的名稱。
KeyStoreException
- 如果不能從指定提供者獲得指定型別的 KeyStoreSpi 實作。
NoSuchProviderException
- 如果指定提供者未在安全提供者列表中註冊。
IllegalArgumentException
- 如果提供者的名稱為 null 或空。Provider
public static KeyStore getInstance(String type, Provider provider) throws KeyStoreException
返回一個封裝 KeyStoreSpi 實作的新 KeyStore 物件,該實作取自指定 Provider 物件。注意,指定 Provider 物件無需在提供者列表中註冊。
type
- keystore 型別。有關標準 keystore 型別的資訊,請參閱
Java Cryptography Architecture API Specification & Reference 中的附錄 A。provider
- 提供者。
KeyStoreException
- 如果不能從指定 Provider 物件獲得指定型別的 KeyStoreSpi 實作。
IllegalArgumentException
- 如果指定提供者為 null。Provider
public static final String getDefaultType()
調用某個 getInstance
方法時不希望使用固定編碼 (hard coded) keystore 型別的應用程序,以及使用者未指定 keystore 型別時希望提供預設 keystore 型別的應用程序可以使用預設的 keystore 型別。
通過將 "keystore.type" 安全屬性(在 Java 安全屬性檔案中)的值設置為所需的 keystore 型別,可以更改預設的 keystore 型別。
public final Provider getProvider()
public final String getType()
public final Key getKey(String alias, char[] password) throws KeyStoreException, NoSuchAlgorithmException, UnrecoverableKeyException
setKeyEntry
,或者以 PrivateKeyEntry
或 SecretKeyEntry
為參數的 setEntry
關聯密鑰與別名。
alias
- 別名password
- 用於恢復密鑰的密碼
KeyStoreException
- 如果 keystore 尚未被初始化(載入)。
NoSuchAlgorithmException
- 如果不能找到恢復密鑰的演算法
UnrecoverableKeyException
- 如果不能恢復密鑰(例如,給定密碼錯誤)。public final Certificate[] getCertificateChain(String alias) throws KeyStoreException
setKeyEntry
,或者以 PrivateKeyEntry
為參數的 setEntry
關聯證書鏈與別名。
alias
- 別名
KeyStoreException
- 如果 keystore 尚未被初始化(載入)。public final Certificate getCertificate(String alias) throws KeyStoreException
如果給定的別名標識通過調用 setCertificateEntry
創建的條目,或者通過調用以 TrustedCertificateEntry
為參數的 setEntry
創建的條目,則返回包含在該條目中的可信證書。
如果給定的別名標識通過調用 setKeyEntry
創建的條目,或者通過調用以 PrivateKeyEntry
為參數的 setEntry
創建的條目,則返回該條目中證書鏈的第一個元素。
alias
- 別名
KeyStoreException
- 如果 keystore 尚未被初始化(載入)。public final Date getCreationDate(String alias) throws KeyStoreException
alias
- 別名
KeyStoreException
- 如果 keystore 尚未被初始化(載入)。public final void setKeyEntry(String alias, Key key, char[] password, Certificate[] chain) throws KeyStoreException
如果給定密鑰的型別為 java.security.PrivateKey
,則它必須附帶證明相應公鑰的證書鏈。
如果給定別名已經存在,則與別名關聯的 keystore 資訊將被給定密鑰(還可能包括證書鏈)覆寫。
alias
- 別名key
- 要與別名關聯的密鑰password
- 保護密鑰的密碼chain
- 相應公鑰的證書鏈(只在給定密鑰的型別為 java.security.PrivateKey
時需要)。
KeyStoreException
- 如果 keystore 尚未被初始化(載入)、無法保護給定的密鑰,或者此操作由於某些其他原因而失敗public final void setKeyEntry(String alias, byte[] key, Certificate[] chain) throws KeyStoreException
如果受保護密鑰的型別為 java.security.PrivateKey
,則它必須附帶證明相應公鑰的證書鏈。如果底層 keystore 實作的型別為 jks
,則必須根據 PKCS #8 標準中的定義將 key
編碼為 EncryptedPrivateKeyInfo
。
如果給定別名已經存在,則與別名關聯的 keystore 資訊將被給定密鑰(還可能包括證書鏈)覆寫。
alias
- 別名key
- 要與別名關聯的密鑰(以受保護格式)chain
- 相應公鑰的證書鏈(只在受保護密鑰的型別為 java.security.PrivateKey
時有用)。
KeyStoreException
- 如果 keystore 尚未被初始化(載入),或者此操作由於某些其他原因而失敗。public final void setCertificateEntry(String alias, Certificate cert) throws KeyStoreException
如果給定別名標識通過調用 setCertificateEntry
創建的現有條目,或者通過調用以 TrustedCertificateEntry
為參數的 setEntry
創建的現有條目,則現有條目中的可信證書將被給定證書覆寫。
alias
- 別名cert
- 證書
KeyStoreException
- 如果 keystore 尚未被初始化,或者給定別名已存在但不標識包含可信證書的條目,或者此操作由於其他某些原因失敗。public final void deleteEntry(String alias) throws KeyStoreException
alias
- 別名
KeyStoreException
- 如果 keystore 尚未被初始化,或者條目不能被移除。public final Enumeration<String> aliases() throws KeyStoreException
KeyStoreException
- 如果 keystore 尚未被初始化(載入)。public final boolean containsAlias(String alias) throws KeyStoreException
alias
- 別名
KeyStoreException
- 如果 keystore 尚未被初始化(載入)。public final int size() throws KeyStoreException
KeyStoreException
- 如果 keystore 尚未被初始化(載入)。public final boolean isKeyEntry(String alias) throws KeyStoreException
setKeyEntry
或者以 PrivateKeyEntry
或 SecretKeyEntry
為參數的 setEntry
創建的,則返回 true。
alias
- 要檢查的 keystore 條目的別名
KeyStoreException
- 如果 keystore 尚未被初始化(載入)。public final boolean isCertificateEntry(String alias) throws KeyStoreException
setCertificateEntry
或者以 TrustedCertificateEntry
為參數的 setEntry
創建的,則返回 true。
alias
- 要檢查的 keystore 條目的別名
KeyStoreException
- 如果 keystore 尚未被初始化(載入)。public final String getCertificateAlias(Certificate cert) throws KeyStoreException
此方法嘗試將給定證書與每一個 keystore 條目比對。如果認為條目是通過調用 setCertificateEntry
或者以 TrustedCertificateEntry
為參數的 setEntry
創建的,則將給定證書與該條目的證書進行比較。
如果認為條目是通過調用 setKeyEntry
或者以 PrivateKeyEntry
為參數的 setEntry
創建的,則將給定證書與該條目證書鏈的第一個元素進行比較。
cert
- 要比對的證書
KeyStoreException
- 如果 keystore 尚未被初始化(載入)。public final void store(OutputStream stream, char[] password) throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException
stream
- 要寫入此 keystore 的輸出串流。password
- 產生 keystore 完整性檢驗的密碼
KeyStoreException
- 如果 keystore 尚未被初始化(載入)。
IOException
- 如果存在資料 I/O 問題
NoSuchAlgorithmException
- 如果不存在恰當的資料完整性演算法
CertificateException
- 如果 keystore 資料中包含無法存儲的證書public final void store(KeyStore.LoadStoreParameter param) throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException
LoadStoreParameter
存儲此 keystore。
param
- 指定如何存儲 keystore 的 LoadStoreParameter
,該參數可以為 null
IllegalArgumentException
- 如果無法識別給定的 LoadStoreParameter
輸入
KeyStoreException
- 如果 keystore 尚未被初始化(載入)
IOException
- 如果存在資料 I/O 問題
NoSuchAlgorithmException
- 如果不存在恰當的資料完整性演算法
CertificateException
- 如果 keystore 資料中包含無法存儲的證書public final void load(InputStream stream, char[] password) throws IOException, NoSuchAlgorithmException, CertificateException
可以給定一個密碼來解鎖 keystore(例如,駐留在硬體標記設備上的 keystore)或檢驗 keystore 資料的完整性。如果沒有指定用於完整性檢驗的密碼,則不會執行完整性檢驗。
如果要創建空 keystore,或者不能從串流中初始化 keystore,則傳遞 null
作為 stream
的參數。
注意,如果此 keystore 已經被載入,那麼它將被重新初始化,並再次從給定輸入串流中載入。
stream
- 從中載入 keystore 的輸入串流,或者 null
password
- 用來檢驗 keystore 完整性的密碼,用來解鎖 keystore 的密碼,或者 null
IOException
- 如果存在 keystore 資料 I/O 問題或格式問題,如果需要密碼卻沒有指定,或者指定的密碼錯誤。如果錯誤是由於密碼錯誤引起的,那麼 IOException
的 cause
應該是 UnrecoverableKeyException
NoSuchAlgorithmException
- 如果不存在用來檢驗 keystore 完整性的演算法
CertificateException
- 如果不能載入 keystore 中的任何證書public final void load(KeyStore.LoadStoreParameter param) throws IOException, NoSuchAlgorithmException, CertificateException
LoadStoreParameter
載入此 keystore。
注意,如果此 KeyStore 已經被載入,那麼它將被重新初始化,並再次從給定參數載入。
param
- 指定如何載入 keystore 的 LoadStoreParameter
,可以為 null
IllegalArgumentException
- 如果無法識別給定 LoadStoreParameter
輸入
IOException
- 如果存在 keystore 資料 I/O 問題或格式問題。如果錯誤是由於 ProtectionParameter
不正確(如密碼錯誤)引起的,那麼 IOException
的 cause
應該是 UnrecoverableKeyException
NoSuchAlgorithmException
- 如果不存在用來檢驗 keystore 完整性的演算法
CertificateException
- 如果不能載入 keystore 中的任何證書public final KeyStore.Entry getEntry(String alias, KeyStore.ProtectionParameter protParam) throws NoSuchAlgorithmException, UnrecoverableEntryException, KeyStoreException
Entry
。
alias
- 獲取此別名的 keystore Entry
protParam
- 用來保護 Entry
的 ProtectionParameter
,可以為 null
Entry
;如果不存在這種條目,則返回 null
NullPointerException
- 如果 alias
為 null
NoSuchAlgorithmException
- 如果不存在用來恢復條目的演算法
UnrecoverableEntryException
- 如果指定的 protParam
不足或無效
UnrecoverableKeyException
- 如果該條目是 PrivateKeyEntry
或 SecretKeyEntry
,並且指定的 protParam
不包含恢復密鑰所需的資訊(如密碼錯誤)
KeyStoreException
- 如果 keystore 尚未被初始化(載入)setEntry(String, KeyStore.Entry, KeyStore.ProtectionParameter)
public final void setEntry(String alias, KeyStore.Entry entry, KeyStore.ProtectionParameter protParam) throws KeyStoreException
Entry
。保護參數用來保護 Entry
。
如果指定別名的條目已經存在,它將被覆寫。
alias
- 以此別名保存 keystore Entry
entry
- 要保存的 Entry
protParam
- 用來保護 Entry
的 ProtectionParameter
,可以為 null
NullPointerException
- 如果 alias
或 entry
為 null
KeyStoreException
- 如果 keystore 尚未被初始化(載入),或者此操作由於其他原因失敗getEntry(String, KeyStore.ProtectionParameter)
public final boolean entryInstanceOf(String alias, Class<? extends KeyStore.Entry> entryClass) throws KeyStoreException
alias
的 keystore Entry
是否是指定 entryClass
的實例或子類別。
alias
- 別名entryClass
- 條目的類別
alias
的 keystore Entry
是指定 entryClass
的實例或子類別,則返回 true;否則返回 false。
NullPointerException
- 如果 alias
或 entryClass
為 null
KeyStoreException
- 如果 keystore 尚未被初始化(載入)
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。