Azure Cloud HSM 證書儲存

Azure Cloud HSM 支援透過 PKCS#11 儲存憑證,使應用程式能同時管理 X.509 憑證與金鑰。 本教學提供建立憑證儲存前置條件的逐步說明,包括 Azure Blob Storage 與 Managed Identity 設定。 如需使用 PKCS#11 API 管理憑證的詳細資訊,請參閱 適用於憑證記憶體的 PKCS#11 API

先決條件

以下先決條件是支援 Azure Cloud HSM 憑證儲存的必要條件。 若 HSM 部署尚未完成,請參考 Azure 雲端 HSM 安裝與配置指南

系統需求

  • Azure Cloud HSM 資源已部署、初始化並配置完成。
  • Azure Cloud HSM Client SDK
  • 應用程式伺服器上的分割擁有者憑證 「PO.crt」 複本。
  • 你的 HSM hsm1.chsm-<resource-name>-<unique-string>.privatelink.cloudhsm.azure.net 的已知地址。
  • 加密使用者憑證的知識

憑證記憶體必要條件

  • Azure Blob 儲存帳戶
  • 用來存取記憶體的受控識別

這很重要

使用任何版本 Windows Server 的客戶應安裝最新版本的 Visual C++ Redistributable。

設定 Azure Blob Storage 帳戶

在使用 PKCS#11 API 進行憑證儲存之前,您必須先建立一個 Azure Blob Storage 帳號。 此儲存體帳戶會保存 PKCS#11 憑證對象,這些物件會以 JWS 格式儲存和擷取。

  1. 若要為 PKCS#11 憑證儲存設定 Azure Blob Storage 帳戶,請前往 Azure 入口網站建立一個新的 Storage Account

  2. 成功建立儲存帳號後,請在Azure入口網站中切換到該帳戶,並在Data storage下選擇Containers。 在這裡,您會建立新的容器來儲存 Blob。

    Azure Blob Storage 中創建容器的截圖。

  3. 建立容器之後,流覽至 [容器屬性] 以找出容器端點 URL。 稍後需要此 URL。

    在 Azure Blob Storage 中定位容器屬性截圖。

  4. [容器屬性] 中,您會找到列出的容器 URL。 azcloudhsm_application.cfg 檔案稍後需要此 URL,讓 PKCS#11 應用程式找出憑證對象的儲存位置。

    Azure Blob Storage properties中容器網址截圖。

設定使用者指派的受控識別以存取記憶體

憑證記憶體的下一個必要條件是建立 使用者指派的受控識別。 此身分識別被授與存取 Azure Blob 儲存體帳戶所需的角色,並用於從您指定的管理員 VM 進行驗證。

備註

下列範例會建立並使用使用者指派的受控識別。 系統指派的受控識別也可以在 VM 上建立及使用。

  1. 若要為 PKCS#11 憑證儲存建立 User Assigned Managed Identity,請前往 Azure 入口網站並建立新身份。

  2. 成功建立受控識別之後,請記下用戶端 標識符,此標識碼稍後在 azcloudhsm_application.cfg 檔案中是必要的,以啟用從 VM 對記憶體帳戶的驗證。

    Azure 入口網站中受管身分識別用戶端 ID 的螢幕擷圖。

  3. 下一步是指派適當的 Azure 角色,授權管理身份(Managed Identity)對先前建立的 Blob Storage 帳號進行讀寫權限。 將 Storage Blob Data Contributor 角色指派給受控身分,將 範圍 設定為 儲存體,然後選取特定的儲存體帳戶資源。

    在 Azure 入口網站中指派儲存體 Blob 資料貢獻者角色的螢幕截圖。

    設定儲存體 Blob 資料參與者角色範圍的螢幕擷取畫面。

  4. 下一個步驟是將 使用者指派的受控識別 指派給將執行 PKCS#11 憑證記憶體應用程式的 VM。 在Azure入口網站中,進入你的虛擬機資源,進入 Security區塊,選擇 Identity,並新增使用者指定身份。

    在Azure入口網站中為虛擬機新增使用者指定管理身份的截圖。

    Azure 入口網站中 VM 身分識別設定的螢幕擷取畫面。

設定 Azure Cloud HSM 的用戶端工具

建立記憶體簽署金鑰

下列azcloudhsm_util命令可用來在單一步驟中建立 PKCS#11 憑證記憶體的 RSA 簽署金鑰組。 根據預設,它會產生 2048 位 RSA 金鑰,其公用指數為 65537。 您可以視需要修改金鑰大小。 在執行命令之前,請確定azcloudhsm_client在背景中以服務的形式執行。

取代下列各項的預留位置:

  • 含有您的加密貨幣使用者名稱的 PKCS11_S。 (例如 cu1)
  • 含有您的加密貨幣使用者密碼的 PKCS11_P。 (例如 user1234)
  • 含有所需金鑰組識別碼的 SIGNING_KEY_ID (此識別碼稍後也會使用於您的 azcloudhsm_application.cfg 檔案)

簽署金鑰標識碼 在此範例中,我們將將簽署密鑰標識碼設定為隨機值。

SIGNING_KEY_ID=$(tr -dc 'a-z' </dev/urandom | head -c 10)

Linux:

sudo ./azcloudhsm_util singlecmd loginHSM -u CU -s $PKCS11_S -p $PKCS11_P genRSAKeyPair -m 2048 -e 65537 -l $SIGNING_KEY_ID -id $SIGNING_KEY_ID

Windows:

.\azcloudhsm_util.exe singlecmd loginHSM -u CU -s %PKCS11_S% -p %PKCS11_P% genRSAKeyPair -m 2048 -e 65537 -l %SIGNING_KEY_ID% -id %SIGNING_KEY_ID%

這很重要

確保每個 HSM 節點都回傳成功。

chsmVMAdmin@AdminVM:/opt/azurecloudhsm/bin$ sudo ./azcloudhsm_util singlecmd loginHSM -u CU -s cu1 -p user1234 genRSAKeyPair -m 2048 -e 65537 -l signkeyid -id signkeyid
Version info, Client Version: 2.09.07.02, SDK API Version: 2.09.07.02, SDK Package Version: 2.0.1.2

Cfm3Initialize() returned app id : 01000000

    session_handle 1000000

    Current FIPS mode is: 00000000

Cfm3LoginHSM returned: 0x00 : HSM Return: SUCCESS

Cluster Status:
Node id 1 status: 0x00000000 : HSM Return: SUCCESS
Node id 2 status: 0x00000000 : HSM Return: SUCCESS
Node id 3 status: 0x00000000 : HSM Return: SUCCESS
Command: genRSAKeyPair -m 2048 -e 65537 -L signkeyid -id signkeyid

Cfm3GenerateKeyPair returned: 0x00 : HSM Return: SUCCESS

Cfm3GenerateKeyPair:    public key handle: 262151    private key handle: 262152

Cluster Status:
Node id 1 status: 0x00000000 : HSM Return: SUCCESS
Node id 2 status: 0x00000000 : HSM Return: SUCCESS
Node id 3 status: 0x00000000 : HSM Return: SUCCESS

更新組態檔

更新應用程式設定

您必須更新 azcloudhsm_application.cfg 檔案中的下列參數。

CERTSTORAGE_URL:此欄位指的是客戶Blob Storage帳戶內容器的網址,用於儲存憑證資訊。 (例如 https://chsmstorage.blob.core.windows.net/certificates

CERTSTORAGE_SIGNING_KEYID:此欄位是指指派給金鑰組的識別碼,用來在記憶體的讀取和寫入作業期間執行完整性檢查(簽署和驗證)。

UAMI_CLIENT_ID:此欄位指的是使用者指派管理身份的用戶端 ID,用於驗證客戶的Blob Storage帳號。 如果保留空白,驗證會預設為使用系統指派的受控識別。

備註

這些參數僅適用於在 PKCS#11 中執行憑證作業時。 金鑰作業不需要它。

DAEMON_ID=1  
SOCKET_TYPE=UNIXSOCKET  
PORT=1111  
USER_KEK_HANDLE=262150  
DEFAULT_WRAP_WITH_TRUSTED=1  
CERTSTORAGE_URL=https://chmsstorage.blob.core.windows.net/certificates  
CERTSTORAGE_SIGNING_KEYID=hjgrwvvofe  
UAMI_CLIENT_ID=25e659cc-6570-4f3b-9617-adfbc84b2565  

驗證 PKCS#11 設定

如需 PKCS#11 組態的範例式驗證,請參閱 PKCS#11 整合指南。

chsmVMAdmin@AdminVM:/opt/azurecloudhsm$ sudo ./cust_p11_app -s cu1 -p user1234 -l /opt/azurecloudhsm/lib64/libazcloudhsm_pkcs11.so
[INFO] Azure Cloud HSM – Loading PKCS#11 library.
[INFO] Azure Cloud HSM – C_GetFunctionList
[INFO] Azure Cloud HSM – Preparing PIN with given username and password.
[INFO] Azure Cloud HSM – C_Initialize
[INFO] Azure Cloud HSM – C_GetInfo
[INFO] Azure Cloud HSM – Retrieve access token, C_GetTokenInfo
[INFO] Azure Cloud HSM – Start session with specified token, C_OpenSession
[INFO] Azure Cloud HSM – Login with PIN, C_Login
Add Your PKCS#11 Code Here

後續步驟