使用 Azure Key Vault 将 TLS/SSL 证书传送到 JVM

本文介绍如何将 Azure 密钥库集成到 JVM 中,以提供 TLS/SSL 证书。

将 JCA 提供程序添加到 java.security 文件

若要注册 JCA 提供程序,JVM 需要知道它。 若要完成此任务,请使用以下步骤:

  1. 在 JVM 安装中创建 java.security 文件的副本,并将文件命名为 my.java.security

  2. 在文件中,查找行 security.provider.<maximum-value>。 将 <maximum-value> 占位符替换为所有条目中处于此位置的最大值。 例如:security.provider.13=SunPKCS11

  3. 将此条目的数目递增 1。 例如, security.provider.13 应变为 security.provider.14.

  4. 添加以下行:

    security.provider.14=com.azure.security.keyvault.jca.KeyVaultJcaProvider
    

注意

请确保每个 security.provider.<X> 条目具有不同的数字值 <X>,并按增量顺序从 1 开始进行排序。

如何运行应用程序

若要运行应用程序,请使用以下步骤,并将 <...> 占位符替换为自己的值:

  1. azure-security-keyvault-jca-X.Y.Z.jar 文件添加到类路径。 例如,如果要与 Tomcat 9 集成,则应使用 tomcat9w.exe 将文件 azure-security-keyvault-jca-X.Y.Z.jar 的完整路径添加到 Java 类路径。

  2. 添加到 -Djava.security.properties==my.java.security 命令行。

  3. 添加到-Dazure.keyvault.uri=<your-keyvault-uri>命令行以指示要使用的 Azure 密钥库。 例如:-Dazure.keyvault.uri=https://some.vault.azure.net/

  4. 根据方案添加以下列表中指示的参数:

    • 如果使用服务主体进行身份验证,请添加以下参数:

      • -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 虚拟机

使用服务主体

若要创建 Azure 客户端 ID 和 Azure 客户端密码,请使用以下命令,将 <...> 占位符替换为自己的值。 请务必存储返回的值,例如appIdpasswordtenant

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客户端可以访问目标密钥库。 若要授予访问权限,请使用以下命令替换 <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 资源配置托管标识中的说明操作

获取托管标识的对象 ID 后,使用以下命令为托管标识创建密钥库的访问策略:

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

注意

使用用户分配的托管标识时,托管标识的对象 ID 也称为主体 ID。

客户端/服务器端 TLS/SSL 示例

有关客户端/服务器端 TLS/SSL 的示例,请参阅适用于 JavaAzure 密钥库 JCA 客户端库的示例部分。

后续步骤