使用 Azure Key Vault 將 TLS/SSL 憑證傳遞至 JVM
本文說明如何將 Azure Key Vault 整合到 JVM 中,以傳遞 TLS/SSL 憑證。
將 JCA 提供者新增至 java.security 檔案
若要註冊 JCA 提供者,JVM 必須了解它的存在。 若要完成這項工作,請使用下列步驟:
在 JVM 安裝內建立 java.security 檔案的複本,並將檔案命名為 my.java.security。
在檔案內,尋找行
security.provider.<maximum-value>
。 將<maximum-value>
佔位元替換成此位置所有項目中的最大值。 例如:security.provider.13=SunPKCS11
。將這個項目的數目遞增 1。 例如,
security.provider.13
應該會變成security.provider.14
。新增下列這一行:
security.provider.14=com.azure.security.keyvault.jca.KeyVaultJcaProvider
注意
請確定每個 security.provider.<X>
專案都有不同的 <X>
數值,並從 1 開始以累加方式排序。
如何執行您的應用程式
若要執行您的應用程式,請使用下列步驟,並將 <...>
佔位元取代為您自己的值:
將 azure-security-keyvault-jca-X.Y.Z.jar 檔案新增至 classpath。 例如,如果您想要與 Tomcat 9 整合,則應該使用 tomcat9w.exe,將檔案的完整路徑 azure-security-keyvault-jca-X.Y.Z.jar 新增至 Java 類別路徑。
將
-Djava.security.properties==my.java.security
新增至命令行。將
-Dazure.keyvault.uri=<your-keyvault-uri>
新增至命令行,以指出要使用的 Azure Key Vault。 例如:-Dazure.keyvault.uri=https://some.vault.azure.net/
。根據您的情境,新增下列清單中指出的參數:
如果您使用服務主體進行驗證,請新增下列自變數:
-Dazure.keyvault.tenant-id=<your-tenant-id>
-Dazure.keyvault.client-id=<your-client-id>
-Dazure.keyvault.client-secret=<your-client-secret>
如果您使用系統指派的受控識別進行驗證,則不需要更多自變數。
如果您使用使用者指派的受控識別進行驗證,請新增下列自變數:
-Dazure.keyvault.managed-identity=<object-id-of-your-user-managed-identity>
如需這些驗證案例的詳細資訊,請參閱 Microsoft Entra ID 中的
使用服務主體
若要建立 Azure 用戶端識別碼和 Azure 用戶端密碼,請使用下列命令,以您自己的值取代 <...>
占位元。 請務必儲存傳回的值,例如 appId
、password
和 tenant
。
export CLIENT_NAME=<your-client-name>
az ad sp create-for-rbac --skip-assignment --name ${CLIENT_NAME}
export CLIENT_ID=$(az ad sp list --display-name ${CLIENT_NAME} | jq -r '.[0].appId')
az ad app credential reset --id ${CLIENT_ID}
儲存傳回的值,以便稍後使用它們。
請確認 CLIENT_ID
指定的用戶端可以存取目標 Key Vault。 若要授予存取權,請使用以下命令,將 <your-key-vault-name>
佔位符替換掉:
az keyvault set-policy \
--name <your-key-vault-name> \
--spn ${CLIENT_ID} \
--secret-permissions get list \
--certificate-permissions get list \
--key-permissions get list
使用受控識別
若要啟用系統指派的受控識別或建立使用者指派的受控識別,請遵循 使用 Azure CLI 在 Azure VM 上設定 Azure 資源的受控識別
取得受控識別的物件標識符之後,請使用下列命令為您的受控識別建立 Key Vault 的存取原則:
az keyvault set-policy \
--name <your-key-vault-name> \
--object-id <object-id-of-your-managed-identity> \
--secret-permissions get list \
--certificate-permissions get list \
--key-permissions get list
注意
使用使用者指派的受控識別時,受控識別的物件標識碼也稱為主體標識符。
用戶端/伺服器端 TLS/SSL 範例
如需用戶端/伺服器端 TLS/SSL 的範例,請參閱適用於 Java