共用方式為


Azure 雲端 HSM 中的驗證

驗證是安全地存取和操作 Microsoft Azure 雲端 HSM 的重要層面。 本文概述驗證方法,包括命令行介面 (CLI)、PKCS#11、Java 密碼編譯延伸模組 (JCE) 和 OpenSSL。 本文也提供多線程和會話處理的最佳做法。

雲端 HSM CLI 驗證

您可以使用 CLI 工具進行驗證,例如 azcloudhsm_util 在互動式模式或單一命令模式中。 在互動式模式中,使用 loginHSM 命令。 若為單一命令模式,請包含 singlecmd 和參數 loginHSM。 建議您在應用程式未使用時安全地儲存 HSM 認證。

互動式模式

./azcloudhsm_util
loginHSM -u CU -s cu1 -p user1234

單一命令模式

sudo ./azcloudhsm_util singlecmd loginHSM -u CU -s cu1 -p user1234 findKey

PKCS#11 驗證

在 PKCS#11 中,您需先使用 C_Login 開啟會話,然後使用 C_OpenSession API 登入。 每個區段只需要使用 C_Login 一次(雲端 HSM 叢集)。 成功登入之後,您可以使用 C_OpenSession 開啟其他會話,而不需再次登入。

char pPin[256] = "cu1:user1234";
…
rv = (func_list->C_Initialize) (NULL);
rv = (func_list->C_GetTokenInfo) (slot, &token_info);
rv = (func_list->C_OpenSession) (slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL, NULL, &session_rw);
rv = (func_list->C_Login) (session_rw, CKU_USER, (CK_UTF8CHAR_PTR) pPin, n_pin);
…

若要取得向 PKCS#11 進行驗證的程式代碼範例,請參閱 整合 PKCS#11 與 Azure Cloud HSM 的指南

JCE 驗證

Azure Cloud HSM 的 JCE 提供者同時支援隱含和明確的登入方法。 每個都適用於不同的使用案例。

建議您盡可能使用隱含登入,因為 SDK 會自主管理驗證。 如果您的應用程式與叢集中斷連線,而且需要重新驗證,這個方法特別有用。 隱式登入也有助於在無法直接控制應用程式程式碼的平台上進行整合時,為應用程式提供憑證。

LoginManager lm = LoginManager.getInstance();
lm.login("PARTITION_1","cu1", "user1234");
…
lm.logout();
…

如需登入方法的詳細資訊,請參閱整合 JCE 與 Azure Cloud HSM 的指南

OpenSSL 驗證

當您使用適用於 Azure Cloud HSM 的 OpenSSL 引擎時,環境變數會提供認證。 建議您在應用程式未使用時安全地儲存 HSM 認證。 在理想情況下,請將環境設定為自動擷取並設定這些環境變數,以避免手動輸入。

export azcloudhsm_password="cu1:user1234" 
export azcloudhsm_openssl_conf=/usr/local/bin/AzureCloudHSM-ClientSDK-1.0.4.0/azcloudhsm_openssl_dynamic.conf
export LD_LIBRARY_PATH=/usr/local/lib64/AzureCloudHSM-ClientSDK-1.0.4.0/:$LD_LIBRARY_PATH
…
sudo ./azcloudhsm_client azcloudhsm_client.cfg > /dev/null 2>&1 &
openssl genpkey -algorithm RSA -out private_key.pem -engine azcloudhsm_openssl
…

如需 OpenSSL 的驗證詳細數據,請參閱 整合 OpenSSL 與 Azure Cloud HSM 的指南

多線程技術

Azure Cloud HSM 支援多線程應用程式,但有處理這些應用程式的考慮:

  • PKCS#11:只需使用一次 C_Initialize 來初始化 PKCS#11 庫。 使用 C_OpenSession指派每個線程自己的會話。 避免跨多個線程使用相同的會話。
  • JCE:僅初始化 Azure 雲端 HSM 提供者一次。 避免在線程之間共用服務提供者介面 (SPI) 對象的實例。 例如,CipherSignatureDigestMacKeyFactoryKeyGenerator物件都僅在各自的線程上下文中使用。

重試整合 HSM 作業流程

Microsoft 可能會為了操作或維護目的,將 Azure 雲端 HSM 叢集中的 HSM 交換掉,例如當裝置發生故障時。 若要為這類案例準備您的應用程式,建議您將用戶端重試邏輯新增至傳送至叢集的所有作業。 此設定預期後續因更換或暫時維護中斷而失敗的作業重試將會成功。

雲端 HSM 用戶端會話處理

每當任何應用程式執行登入或註銷時,Azure Cloud HSM 用戶端都會登入和註銷所有 HSM 會話。因此,如果第二個應用程式使用 azurecloudhsm_client,它會共用相同的會話,並在從相同主機執行時繼承相同的登入認證。 此工具 azurecloudhsm_client 會追蹤哪些應用程式嘗試登入。 它可讓正確登入的應用程式執行需要驗證的命令。

例如,如果您使用 azurecloudhsm_util 登入,並嘗試在另一個終端機視窗中使用 Azure Cloud HSM 提供者執行您的應用程式或金鑰工具,由於已經有一個作用中的會話開啟,因此會發生錯誤。 您必須先關閉應用程式的 azurecloudhsm_util 會話,然後在主機上建立 azurecloudhsm_client 會話,以進行驗證。