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 格式儲存和擷取。
若要為 PKCS#11 憑證儲存設定 Azure Blob Storage 帳戶,請前往 Azure 入口網站建立一個新的 Storage Account。
成功建立儲存帳號後,請在Azure入口網站中切換到該帳戶,並在
Data storage 下選擇 Containers 。 在這裡,您會建立新的容器來儲存 Blob。建立容器之後,流覽至 [容器屬性] 以找出容器端點 URL。 稍後需要此 URL。
在 Azure Blob Storage 中定位容器屬性截圖。 在 [容器屬性] 中,您會找到列出的容器 URL。 azcloudhsm_application.cfg 檔案稍後需要此 URL,讓 PKCS#11 應用程式找出憑證對象的儲存位置。
設定使用者指派的受控識別以存取記憶體
憑證記憶體的下一個必要條件是建立 使用者指派的受控識別。 此身分識別被授與存取 Azure Blob 儲存體帳戶所需的角色,並用於從您指定的管理員 VM 進行驗證。
備註
下列範例會建立並使用使用者指派的受控識別。 系統指派的受控識別也可以在 VM 上建立及使用。
若要為 PKCS#11 憑證儲存建立 User Assigned Managed Identity,請前往 Azure 入口網站並建立新身份。
成功建立受控識別之後,請記下用戶端 標識符,此標識碼稍後在 azcloudhsm_application.cfg 檔案中是必要的,以啟用從 VM 對記憶體帳戶的驗證。
下一步是指派適當的 Azure 角色,授權管理身份(Managed Identity)對先前建立的 Blob Storage 帳號進行讀寫權限。 將 Storage Blob Data Contributor 角色指派給受控身分,將 範圍 設定為 儲存體,然後選取特定的儲存體帳戶資源。
下一個步驟是將 使用者指派的受控識別 指派給將執行 PKCS#11 憑證記憶體應用程式的 VM。 在Azure入口網站中,進入你的虛擬機資源,進入 Security區塊,選擇 Identity,並新增使用者指定身份。
設定 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
後續步驟
- PKCS#11 憑證儲存 API:學習如何使用 PKCS#11 API 管理 Azure 雲端 HSM 中的 X.509 憑證。
- Azure 雲端 HSM 概覽
- 保護您的 Azure 雲端 HSM