語言

KeyStore 類別

定義

此類別代表一種儲存密碼金鑰與憑證的設施。

[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

回傳此 Object的執行時類別。

(繼承來源 Object)
DefaultType

回傳由安全屬性指定的keystore.type預設金鑰庫類型,若無此屬性則回傳字串「jks」(Java keystore的縮寫)。

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)

判斷指定 Entry 的密鑰儲存alias庫是指定 entryClass的實例還是子類別。

Equals(Object)

此類別代表一種儲存密碼金鑰與憑證的設施。

(繼承來源 JavaObject)
Equals(Object)

表示是否有其他物體「等同」於此物。

(繼承來源 Object)
GetCertificate(String)

回傳與該別名相關的憑證。

GetCertificateAlias(Certificate)

回傳第一個與該憑證相符的金鑰儲存項目的(別名)名稱。

GetCertificateChain(String)

回傳與該別名相關的憑證鏈。

GetCreationDate(String)

回傳由該別名識別的條目的建立日期。

GetEntry(String, KeyStore+IProtectionParameter)

取得指定別名的金鑰儲存 Entry 庫,並設定指定保護參數。

GetHashCode()

回傳物件的雜湊碼值。

(繼承來源 Object)
GetInstance(File, Char[])

回傳一個載入的、屬於適當鍵庫類型的金鑰庫物件。

GetInstance(File, KeyStore+ILoadStoreParameter)

探測金鑰庫檔案並回傳已載入的偵測型別金鑰庫。

GetInstance(String, Provider)

回傳指定類型的金鑰儲存物件。

GetInstance(String, String)

回傳指定類型的金鑰儲存物件。

GetInstance(String)

回傳指定類型的金鑰儲存物件。

GetKey(String, Char[])

回傳與該別名相關聯的金鑰,並使用指定密碼來恢復該金鑰。

IsCertificateEntry(String)

若由別名識別的條目是由呼叫 所建立setCertificateEntry,或由呼叫 setEntry建立TrustedCertificateEntry,則返回為真。

IsKeyEntry(String)

若該別名所識別的條目是由呼叫 所建立setKeyEntry,或是透過呼叫 setEntry a PrivateKeyEntry 或 a SecretKeyEntry所建立,則返回為真。

JavaFinalize()
已淘汰.

當垃圾回收判定該物件不再有相關參考時,由垃圾回收器呼叫。

(繼承來源 Object)
Load(KeyStore+ILoadStoreParameter)

從給定的輸入串流載入此 KeyStore。

Load(Stream, Char[])

從給定的輸入串流載入此 KeyStore。

Notify()

喚醒一個正在該物件監視器上等待的執行緒。

(繼承來源 Object)
NotifyAll()

喚醒所有等待該物件監視器的執行緒。

(繼承來源 Object)
SetCertificateEntry(String, Certificate)

將給定的受信任憑證指派給指定的別名。

SetEntry(String, KeyStore+IEntry, KeyStore+IProtectionParameter)

將金鑰儲存 Entry 在指定的別名下。

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)

取得實例 self類型的 JNI 名稱。

JavaAs<TResult>(IJavaPeerable)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

JavaCast<TResult>(IJavaObject)

執行 Android 執行時檢查型別轉換。

JavaCast<TResult>(IJavaObject)

此類別代表一種儲存密碼金鑰與憑證的設施。

TryJavaCast<TResult>(IJavaPeerable, TResult)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

適用於