用戶端 SDK 3 的AWS CloudHSM KeyStore Java 類別 - AWS CloudHSM

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

用戶端 SDK 3 的AWS CloudHSM KeyStore Java 類別

AWS CloudHSM KeyStore 類別提供特殊用途的 PKCS12 金鑰存放區,允許透過 AWS CloudHSM keytool jarsigner 等應用程式存取金鑰。此金鑰存放區可與您的金鑰資料一起儲存憑證,並將其與在 AWS CloudHSM儲存的金鑰資料連結在一起。

注意

由於憑證是公開資訊,並且為了最大化密碼編譯金鑰的儲存容量, AWS CloudHSM 不支援在 HSMs上儲存憑證。

類別實作 Java AWS CloudHSM KeyStore密碼編譯延伸 (JCE) 的KeyStore服務提供者界面 (SPI)。如需使用 KeyStore 的詳細資訊,請參閱 Class KeyStore

為 AWS CloudHSM 用戶端 SDK 3 選擇適當的金鑰存放區

AWS CloudHSM Java 密碼編譯延伸 (JCE) 供應商隨附預設的傳遞唯讀金鑰存放區,可將所有交易傳遞至 HSM。此預設金鑰存放區與特殊用途的 AWS CloudHSM 金鑰存放區不同。在大多數情況下,您會使用預設值取得較佳的執行階段效能和輸送量。除了將金鑰操作卸載至 HSM 之外,您應該只將 AWS CloudHSM KeyStore 用於需要憑證和憑證型操作支援的應用程式。

雖然這兩種金鑰存放區都使用 JCE 提供者進行操作,但它們是獨立的實體,且不會彼此交換資訊。

請依照下方步驟說明為您的 Java 應用程式載入預設的金鑰存放區:

KeyStore ks = KeyStore.getInstance("Cavium");

載入特殊用途的 CloudHSM 金鑰存放區,如下所示:

KeyStore ks = KeyStore.getInstance("CloudHSM")

初始化用戶端 SDK 3 的 AWS CloudHSM KeyStore

以您登入 JCE 供應商的相同方式登入 AWS CloudHSM KeyStore。您可以使用環境變數或系統屬性檔案,並且在開始使用 CloudHSM 金鑰存放區之前應先登入。如需使用 JCE 提供者登入 HSM 的範例,請參閱登入 HSM

如有需要,您可以指定一組密碼來加密保存金鑰儲存資料的本機 PKCS12 檔案。當您建立 AWS CloudHSM 金鑰存放區時,您可以設定密碼,並在使用載入、設定和取得方法時提供密碼。

請依照以下方式,將新的 CloudHSM 金鑰存放區物件執行個體化:

ks.load(null, null);

使用 store 方法將金鑰存放區資料寫入檔案。從那時起,您可以依照以下方式,搭配來源檔案和密碼使用 load 方法載入現有的金鑰存放區:

ks.load(inputStream, password);

使用用戶端 SDK 3 的 AWS CloudHSMAWS CloudHSM KeyStore

CloudHSM 金鑰存放區物件通常會透過第三方應用程式使用,例如:jarsignerkeytool。您也可以直接搭配程式碼存取物件。

AWS CloudHSM KeyStore 符合 JCE 類別 KeyStore 規格,並提供下列函數。

  • load

    從特定的輸入串流載入金鑰存放區。如果在儲存金鑰存放區時設定了密碼,則必須提供相同的密碼才能成功載入。將這兩個參數設為 Null 以初始化一個新的空金鑰存放區。

    KeyStore ks = KeyStore.getInstance("CloudHSM"); ks.load(inputStream, password);
  • aliases

    傳回特定的金鑰存放區執行個體中的所有項目別名名稱列舉。結果包括本機儲存在 PKCS12 檔案中的物件,以及常駐於 HSM 的物件。

    範本程式碼:

    KeyStore ks = KeyStore.getInstance("CloudHSM"); for(Enumeration<String> entry = ks.aliases(); entry.hasMoreElements();) { String label = entry.nextElement(); System.out.println(label); }
  • ContainsAlias

    如果金鑰存放區可存取至少一個有指定別名的物件,則傳回 True。金鑰存放區會檢查本機儲存在 PKCS12 檔案中的物件,以及常駐於 HSM 的物件。

  • DeleteEntry

    從本機 PKCS12 檔案刪除憑證項目。不支援使用 AWS CloudHSM KeyStore 刪除存放在 HSM 中的金鑰資料。您可以使用 CloudHSM 的 key_mgmt_util 工具刪除金鑰。

  • GetCertificate

    如果可用,則傳回與別名相關聯的憑證。如果別名不存在或參考非憑證的物件,則函數會傳回 NULL。

    KeyStore ks = KeyStore.getInstance("CloudHSM"); Certificate cert = ks.getCertificate(alias)
  • GetCertificateAlias

    傳回第一個資料符合特定憑證的金鑰存放區項目名稱 (別名)。

    KeyStore ks = KeyStore.getInstance("CloudHSM"); String alias = ks.getCertificateAlias(cert)
  • GetCertificateChain

    傳回與特定別名相關聯的憑證鏈。如果別名不存在或參考非憑證的物件,則函數會傳回 NULL。

  • GetCreationDate

    傳回由給定別名辨識的項目建立日期。如果沒有建立日期,則函數會傳回憑證生效的日期。

  • GetKey

    GetKey 會傳遞給 HSM 並傳回與特定標籤對應的金鑰物件。由於 getKey 會直接查詢 HSM,因此無論金鑰存放區是否產生金鑰,都可用於 HSM 上的任何金鑰。

    Key key = ks.getKey(keyLabel, null);
  • IsCertificateEntry

    檢查有特定別名的項目是否代表憑證項目。

  • IsKeyEntry

    檢查有特定別名的項目是否代表金鑰項目。此動作會在 PKCS12 檔案和 HSM 中搜尋別名。

  • SetCertificateEntry

    指定特定憑證至特定別名。如果特定的別名已用於識別金鑰或憑證,則會擲出 KeyStoreException。您可以使用 JCE 程式碼來取得金鑰物件,然後使用金鑰存放區 SetKeyEntry 方法連結憑證至密鑰。

  • byte[] 金鑰的 SetKeyEntry

    用戶端 SDK 3 目前不支援此 API。

  • Key 物件的 SetKeyEntry

    指定特定金鑰至特定別名,並將其儲存在 HSM 內。如果 Key 物件不是類型 CaviumKey,金鑰會以可擷取的工作階段金鑰匯入 HSM。

    如果 Key 物件屬於類型 PrivateKey,則必須附有相對應的憑證鏈。

    如果別名已經存在,則 SetKeyEntry 呼叫會擲出 KeyStoreException 並防止覆寫金鑰。如果必須覆寫金鑰,請使用 KMU 或 JCE。

  • EngineSize

    傳回金鑰存放區中的項目數目。

  • Store

    以 PKCS12 檔案格式儲存金鑰存放區至特定輸出串流,並使用特定的密碼加以保護。此外,它仍然保留載入的金鑰 (使用 setKey 呼叫的組合)。