KeyStore 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
此類別代表一種儲存密碼金鑰與憑證的設施。
[Android.Runtime.Register("java/security/KeyStore", DoNotGenerateAcw=true)]
public class KeyStore : Java.Lang.Object
[<Android.Runtime.Register("java/security/KeyStore", DoNotGenerateAcw=true)>]
type KeyStore = class
inherit Object
- 繼承
- 屬性
備註
此類別代表一種儲存密碼金鑰與憑證的設施。
A KeyStore 管理不同類型的條目。 每種類型的條目都實作了該 KeyStore.Entry 介面。 提供三種基本 KeyStore.Entry 實作:
<ul><li><b>KeyStore.PrivateKeyEntry</b>
此類條目會儲存一個密碼學 PrivateKey資料,並可選擇以受保護格式儲存,以防止未經授權存取。 同時還附有對應公鑰的憑證鏈。
私鑰與憑證鏈由特定實體用於自我認證。 此認證的應用包括軟體分銷組織,這些組織在軟體發布及/或授權軟體時簽署 JAR 檔案。
<li><b>KeyStore.SecretKeyEntry</b>
此類條目會儲存一個密碼學 SecretKey資料,並可選擇以受保護格式儲存,以防止未經授權存取。
<li><b>KeyStore.TrustedCertificateEntry</b>
此類條目包含屬於另一方的單一公鑰 Certificate 。 之所以稱為 受信任憑證 ,是因為金鑰庫擁有者相信憑證中的公鑰確實屬於憑證主 體 (擁有者)所識別的身份。
此類條目可用於認證其他方。 </ul>
密鑰儲存中的每個項目以「別名」字串來識別。 在私鑰及其相關憑證鏈中,這些字串區分實體可能自我驗證的不同方式。 例如,該實體可能使用不同的憑證授權中心,或使用不同的公鑰演算法來驗證自身。
別名是否對大小寫敏感則取決於實作。 為避免問題,建議不要在 KeyStore 中使用只在特定情況下不同的別名。
此處未說明密鑰儲存是否為持久性,以及若為持久性,密鑰儲存所使用的機制。 這使得可以使用多種技術來保護敏感(例如私鑰或秘密)金鑰。 智慧卡或其他整合加密引擎(SafeKeyper)是一種選擇,且可使用較簡單的機制如檔案(格式多樣)。
請求 KeyStore 物件的典型方式包括指定現有的 keystore 檔案、依賴預設型別並提供特定的 keystore 類型。
<ul><li>要指定現有的金鑰儲存檔:
// get keystore password
char[] password = getPassword();
// probe the keystore file and load the keystore entries
KeyStore ks = KeyStore.getInstance(new File("keyStoreName"), password);
系統會探測指定檔案以判斷其金鑰儲存型態,並回傳已載入的金鑰儲存實作。 使用此方法時,無需呼叫密鑰儲存 #load(java.io.InputStream, char[]) load 的方法。
<li>依賴預設類型:
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
系統會回傳預設類型的金鑰存儲實作。
<為了>提供特定的金鑰存儲類型:
KeyStore ks = KeyStore.getInstance("JKS");
系統會回傳環境中指定金鑰庫類型中最優的實作。 </ul>
在存取密鑰儲存之前,必須是 #load(java.io.InputStream, char[]) loaded。
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
// get user password and file input stream
char[] password = getPassword();
try (FileInputStream fis = new FileInputStream("keyStoreName")) {
ks.load(fis, password);
}
要用上述load方法建立空密鑰庫,將參數傳遞nullInputStream給 。
一旦金鑰庫載入完成,就可以從金鑰庫讀取現有的項目,或將新的項目寫入金鑰庫:
KeyStore.ProtectionParameter protParam =
new KeyStore.PasswordProtection(password);
// get my private key
KeyStore.PrivateKeyEntry pkEntry = (KeyStore.PrivateKeyEntry)
ks.getEntry("privateKeyAlias", protParam);
PrivateKey myPrivateKey = pkEntry.getPrivateKey();
// save my secret key
javax.crypto.SecretKey mySecretKey;
KeyStore.SecretKeyEntry skEntry =
new KeyStore.SecretKeyEntry(mySecretKey);
ks.setEntry("secretKeyAlias", skEntry, protParam);
// store away the keystore
try (FileOutputStream fos = new FileOutputStream("newKeyStoreName")) {
ks.store(fos, password);
}
請注意,雖然相同密碼可用於載入金鑰庫、保護私鑰條目、保護秘密金鑰條目及存放金鑰庫(如上方範例程式碼所示),但也可能使用不同的密碼或其他保護參數。
Android 提供以下KeyStore類型:<table><thead><tr><th>Algorithm</th><th>Supported API Levels</th></tr/thead><>< tbody><tr><td>AndroidCAStore</td td><>14+</td></tr><tr td><>AndroidKeyStore</td td><>18+</td></tr><tr class=“deprecated”TD BCPKCS12/TD><TD 1-8></TD></TR><TR><TD>BKS</td><TD 1>+</td></tr><tr td><td>BouncyCastle</td td><>1+</td></tr><tr td><>PKCS12</td td><td>1+</td></tr><tr class =“deprecated”>< td>PKCS12-DEF</td><><>達陣 1-8</達陣></計時/身體></><表格><>
這些類型在 Java 密碼學架構標準演算法名稱文件的 KeyStore 章節中有描述。
在 1.2 版本中加入。
Java 文件 java.security.KeyStore。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
建構函式
| 名稱 | Description |
|---|---|
| KeyStore(IntPtr, JniHandleOwnership) |
用於建立 JNI 物件受管理表示的建構器;由執行時呼叫。 |
| KeyStore(KeyStoreSpi, Provider, String) |
建立指定類型的 KeyStore 物件,並將該提供者實作(SPI 物件)封裝其中。 |
屬性
| 名稱 | Description |
|---|---|
| Class |
回傳此 |
| DefaultType |
回傳由安全屬性指定的 |
| Handle |
底層 Android 實例的帳號。 (繼承來源 Object) |
| JniIdentityHashCode |
取得由互通執行時指派給此 Java 對等端的身份雜湊碼。 (繼承來源 Object) |
| JniManagedPeerState |
此類別代表一種儲存密碼金鑰與憑證的設施。 (繼承來源 JavaObject) |
| JniPeerMembers |
此類別代表一種儲存密碼金鑰與憑證的設施。 |
| PeerReference |
取得這個 Java 節點的 JNI 物件參考。 (繼承來源 Object) |
| Provider |
回傳該金鑰庫的提供者。 |
| ThresholdClass |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 |
| ThresholdType |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 |
| Type |
回傳這個密鑰庫的類型。 |
方法
| 名稱 | Description |
|---|---|
| Aliases() |
列出了這個金鑰庫的所有別名名稱。 |
| Clone() |
建立並回傳此物件的副本。 (繼承來源 Object) |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
此類別代表一種儲存密碼金鑰與憑證的設施。 (繼承來源 JavaObject) |
| ContainsAlias(String) |
檢查該別名是否存在於此金鑰儲存庫中。 |
| DeleteEntry(String) |
從此金鑰庫中刪除由該別名識別的條目。 |
| Dispose() |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| Dispose(Boolean) |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| DisposeUnlessReferenced() |
此類別代表一種儲存密碼金鑰與憑證的設施。 (繼承來源 JavaObject) |
| EntryInstanceOf(String, Class) |
判斷指定 |
| Equals(Object) |
此類別代表一種儲存密碼金鑰與憑證的設施。 (繼承來源 JavaObject) |
| Equals(Object) |
表示是否有其他物體「等同」於此物。 (繼承來源 Object) |
| GetCertificate(String) |
回傳與該別名相關的憑證。 |
| GetCertificateAlias(Certificate) |
回傳第一個與該憑證相符的金鑰儲存項目的(別名)名稱。 |
| GetCertificateChain(String) |
回傳與該別名相關的憑證鏈。 |
| GetCreationDate(String) |
回傳由該別名識別的條目的建立日期。 |
| GetEntry(String, KeyStore+IProtectionParameter) |
取得指定別名的金鑰儲存 |
| GetHashCode() |
回傳物件的雜湊碼值。 (繼承來源 Object) |
| GetInstance(File, Char[]) |
回傳一個載入的、屬於適當鍵庫類型的金鑰庫物件。 |
| GetInstance(File, KeyStore+ILoadStoreParameter) |
探測金鑰庫檔案並回傳已載入的偵測型別金鑰庫。 |
| GetInstance(String, Provider) |
回傳指定類型的金鑰儲存物件。 |
| GetInstance(String, String) |
回傳指定類型的金鑰儲存物件。 |
| GetInstance(String) |
回傳指定類型的金鑰儲存物件。 |
| GetKey(String, Char[]) |
回傳與該別名相關聯的金鑰,並使用指定密碼來恢復該金鑰。 |
| IsCertificateEntry(String) |
若由別名識別的條目是由呼叫 所建立 |
| IsKeyEntry(String) |
若該別名所識別的條目是由呼叫 所建立 |
| JavaFinalize() |
已淘汰.
當垃圾回收判定該物件不再有相關參考時,由垃圾回收器呼叫。 (繼承來源 Object) |
| Load(KeyStore+ILoadStoreParameter) |
從給定的輸入串流載入此 KeyStore。 |
| Load(Stream, Char[]) |
從給定的輸入串流載入此 KeyStore。 |
| Notify() |
喚醒一個正在該物件監視器上等待的執行緒。 (繼承來源 Object) |
| NotifyAll() |
喚醒所有等待該物件監視器的執行緒。 (繼承來源 Object) |
| SetCertificateEntry(String, Certificate) |
將給定的受信任憑證指派給指定的別名。 |
| SetEntry(String, KeyStore+IEntry, KeyStore+IProtectionParameter) |
將金鑰儲存 |
| SetHandle(IntPtr, JniHandleOwnership) |
設定 Handle 屬性。 (繼承來源 Object) |
| SetKeyEntry(String, Byte[], Certificate[]) |
將已受保護的指定金鑰指派給指定的別名。 |
| SetKeyEntry(String, IKey, Char[], Certificate[]) |
將指定金鑰分配給指定的別名,並以指定密碼保護它。 |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
此類別代表一種儲存密碼金鑰與憑證的設施。 (繼承來源 JavaObject) |
| Size() |
取得此密鑰庫中的條目數量。 |
| Store(KeyStore+ILoadStoreParameter) |
將此金鑰儲存儲存在給定的輸出串流中,並以指定密碼保護其完整性。 |
| Store(Stream, Char[]) |
將此金鑰儲存儲存在給定的輸出串流中,並以指定密碼保護其完整性。 |
| ToArray<T>() |
從這個 Java 陣列包裝器建立一個受管理陣列。 (繼承來源 Object) |
| ToString() |
回傳物件的字串表示。 (繼承來源 Object) |
| UnregisterFromRuntime() |
將此 Java 節點從互通執行時中取消註冊。 (繼承來源 Object) |
| Wait() |
導致目前執行緒等待被喚醒,通常是透過 <em>通知</><em 或 em>中斷</em> 來喚醒。 (繼承來源 Object) |
| Wait(Int64, Int32) |
會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。 (繼承來源 Object) |
| Wait(Int64) |
會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。 (繼承來源 Object) |
明確介面實作
| 名稱 | Description |
|---|---|
| IJavaPeerable.Disposed() |
此類別代表一種儲存密碼金鑰與憑證的設施。 (繼承來源 JavaObject) |
| IJavaPeerable.Finalized() |
此類別代表一種儲存密碼金鑰與憑證的設施。 (繼承來源 JavaObject) |
| IJavaPeerable.JniObjectReferenceControlBlock |
此類別代表一種儲存密碼金鑰與憑證的設施。 (繼承來源 JavaObject) |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
此類別代表一種儲存密碼金鑰與憑證的設施。 (繼承來源 JavaObject) |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
此類別代表一種儲存密碼金鑰與憑證的設施。 (繼承來源 JavaObject) |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
此類別代表一種儲存密碼金鑰與憑證的設施。 (繼承來源 JavaObject) |
擴充方法
| 名稱 | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
取得實例 |
| JavaAs<TResult>(IJavaPeerable) |
試著強制 |
| JavaCast<TResult>(IJavaObject) |
執行 Android 執行時檢查型別轉換。 |
| JavaCast<TResult>(IJavaObject) |
此類別代表一種儲存密碼金鑰與憑證的設施。 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
試著強制 |