Compartir a través de

快速入门:Azure 密钥保管库用于Java的证书客户端库(证书)

开始使用适用于 Java 的 Azure 密钥保管库 客户端库。 请遵循以下步骤安装包并试用基本任务的示例代码。

提示

如果要在 Spring 应用程序中使用Azure 密钥保管库证书资源,建议将 Spring Cloud Azure 视为替代方法。 Spring Cloud Azure 是一个开源项目,它提供与 Azure 服务的无缝 Spring 集成。 若要详细了解 Spring Cloud Azure,并查看使用 密钥保管库 证书的示例,请参阅 使用 Azure 密钥保管库 证书在 Spring Boot 中启用 HTTPS

其他资源:

先决条件

本快速入门假定你在 Linux 终端窗口中运行 Azure CLIApache Maven

安装

本快速入门使用Azure标识库与Azure CLI来对用户进行身份验证,以访问Azure服务。 开发人员还可以使用Visual Studio或Visual Studio Code对其调用进行身份验证,有关详细信息,请参阅 使用 Azure标识客户端库对客户端进行身份验证

登录到 Azure

  1. 运行 login 命令。

    az login
    

    如果 CLI 可以打开默认浏览器,它将执行此操作并加载Azure登录页。

    否则,请在 https://login.partner.microsoftonline.cn/common/oauth2/deviceauth 处打开浏览器页,然后输入终端中显示的授权代码。

  2. 在浏览器中使用帐户凭据登录。

创建新的Java控制台应用

在控制台窗口中,使用 mvn 命令创建名为 akv-certificates-java 的新Java控制台应用。

mvn archetype:generate -DgroupId=com.keyvault.certificates.quickstart
                       -DartifactId=akv-certificates-java
                       -DarchetypeArtifactId=maven-archetype-quickstart
                       -DarchetypeVersion=1.4
                       -DinteractiveMode=false

生成项目的输出将如下所示:

[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: maven-archetype-quickstart:1.4
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.keyvault.certificates.quickstart
[INFO] Parameter: artifactId, Value: akv-certificates-java
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: com.keyvault.certificates.quickstart
[INFO] Parameter: packageInPathFormat, Value: com/keyvault/quickstart
[INFO] Parameter: package, Value: com.keyvault.certificates.quickstart
[INFO] Parameter: groupId, Value: com.keyvault.certificates.quickstart
[INFO] Parameter: artifactId, Value: akv-certificates-java
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Project created from Archetype in dir: /home/user/quickstarts/akv-certificates-java
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  38.124 s
[INFO] Finished at: 2019-11-15T13:19:06-08:00
[INFO] ------------------------------------------------------------------------

将目录更改为新创建的 akv-certificates-java/ 文件夹。

cd akv-certificates-java

安装该程序包

在文本编辑器中打开 pom.xml 文件。 将以下依赖项元素添加到依赖项组。

    <dependency>
      <groupId>com.azure</groupId>
      <artifactId>azure-security-keyvault-certificates</artifactId>
      <version>4.1.3</version>
    </dependency>

    <dependency>
      <groupId>com.azure</groupId>
      <artifactId>azure-identity</artifactId>
      <version>1.2.0</version>
    </dependency>

创建资源组和密钥保管库

本快速入门使用预先创建的Azure密钥保管库。 可以按照 Azure CLI 快速入门Azure PowerShell快速入门Azure 门户快速入门中的步骤创建密钥保管库。

或者,可以运行这些Azure CLI或Azure PowerShell命令。

重要

每个密钥保管库必须具有唯一的名称。 在以下示例中,将 <your-unique-keyvault-name> 替换为密钥保管库的名称。

az group create --name "myResourceGroup" -l "ChinaEast"

az keyvault create --name "<your-unique-keyvault-name>" -g "myResourceGroup" --enable-rbac-authorization

请授予对您的密钥保管库的访问权限

若要通过 Role-Based 访问控制 (RBAC)获取密钥保管库的权限,请使用 Azure CLI 命令az 角色分配创建为“用户主体名称”(UPN)分配角色。

az role assignment create --role "Key Vault Certificates Officer" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.KeyVault/vaults/<vault-name>"

<upn><subscription-id><resource-group><vault-name> 替换为实际值。 UPN 通常采用电子邮件地址格式(例如 username@domain.com)。

设置环境变量

此应用程序使用密钥保管库名称作为名为 KEY_VAULT_NAME 的环境变量。

Windows

set KEY_VAULT_NAME=<vault-name>

Windows PowerShell

$Env:KEY_VAULT_NAME="<vault-name>"

macOS 或 Linux

export KEY_VAULT_NAME=<vault-name>

对象模型

Java的 Azure 密钥保管库 证书客户端库允许管理证书。 代码示例部分介绍了如何创建客户端,以及如何创建、检索和删除证书。

整个控制台应用在下面

代码示例

添加指令

将以下指令添加到代码的顶部:

import com.azure.core.util.polling.SyncPoller;
import com.azure.identity.DefaultAzureCredentialBuilder;

import com.azure.security.keyvault.certificates.CertificateClient;
import com.azure.security.keyvault.certificates.CertificateClientBuilder;
import com.azure.security.keyvault.certificates.models.CertificateOperation;
import com.azure.security.keyvault.certificates.models.CertificatePolicy;
import com.azure.security.keyvault.certificates.models.DeletedCertificate;
import com.azure.security.keyvault.certificates.models.KeyVaultCertificate;
import com.azure.security.keyvault.certificates.models.KeyVaultCertificateWithPolicy;

进行身份验证并创建客户端

对大多数Azure服务的应用程序请求必须获得授权。 建议使用 DefaultAzureCredential 在代码中实现与 Azure 服务的无密码连接。 DefaultAzureCredential 支持多种身份验证方法,并确定应在运行时使用哪种方法。 通过这种方法,你的应用可在不同环境(本地与生产)中使用不同的身份验证方法,而无需实现特定于环境的代码。

在本快速入门中,DefaultAzureCredential使用登录到Azure CLI的本地开发用户的凭据向密钥保管库进行身份验证。 将应用程序部署到Azure时,同一DefaultAzureCredential代码可以自动发现和使用分配给应用服务、虚拟机或其他服务的托管标识。 有关详细信息,请参阅托管标识概述

在此示例中,密钥保管库的名称扩展为密钥保管库 URI,格式为 https://<vault-name>.vault.azure.cn。 有关向密钥保管库进行身份验证的详细信息,请参阅开发人员指南

String keyVaultName = System.getenv("KEY_VAULT_NAME");
String keyVaultUri = "https://" + keyVaultName + ".vault.azure.cn";

CertificateClient certificateClient = new CertificateClientBuilder()
    .vaultUrl(keyVaultUri)
    .credential(new DefaultAzureCredentialBuilder().build())
    .buildClient();

保存机密

现在,应用程序已进行身份验证,你可使用 certificateClient.beginCreateCertificate 方法在密钥保管库中创建证书。 该操作需要证书名称和证书策略;在本例中,我们已将值“myCertificate”分配给 certificateName 变量,并使用默认策略。

创建证书的操作耗时很长,你可轮询其进度或等待操作完成。

SyncPoller<CertificateOperation, KeyVaultCertificateWithPolicy> certificatePoller =
    certificateClient.beginCreateCertificate(certificateName, CertificatePolicy.getDefault());
certificatePoller.waitForCompletion();

可通过以下调用在证书创建完成后获取证书:

KeyVaultCertificate createdCertificate = certificatePoller.getFinalResult();

检索证书

现在,可以使用 certificateClient.getCertificate 方法检索以前创建的证书。

KeyVaultCertificate retrievedCertificate = certificateClient.getCertificate(certificateName);

现可使用 retrievedCertificate.getNameretrievedCertificate.getProperties 等操作访问检索到的证书的详细信息。还可访问其内容 retrievedCertificate.getCer

删除证书

最后,让我们使用 certificateClient.beginDeleteCertificate 方法从密钥保管库中删除证书,该操作耗时也很长。

SyncPoller<DeletedCertificate, Void> deletionPoller = certificateClient.beginDeleteCertificate(certificateName);
deletionPoller.waitForCompletion();

清理资源

不再需要时,可以使用Azure CLI或Azure PowerShell删除密钥保管库和相应的资源组。

az group delete -g "myResourceGroup"
Remove-AzResourceGroup -Name "myResourceGroup"

示例代码

package com.keyvault.certificates.quickstart;

import com.azure.core.util.polling.SyncPoller;
import com.azure.identity.DefaultAzureCredentialBuilder;

import com.azure.security.keyvault.certificates.CertificateClient;
import com.azure.security.keyvault.certificates.CertificateClientBuilder;
import com.azure.security.keyvault.certificates.models.CertificateOperation;
import com.azure.security.keyvault.certificates.models.CertificatePolicy;
import com.azure.security.keyvault.certificates.models.DeletedCertificate;
import com.azure.security.keyvault.certificates.models.KeyVaultCertificate;
import com.azure.security.keyvault.certificates.models.KeyVaultCertificateWithPolicy;

public class App {
    public static void main(String[] args) throws InterruptedException, IllegalArgumentException {
        String keyVaultName = System.getenv("KEY_VAULT_NAME");
        String keyVaultUri = "https://" + keyVaultName + ".vault.azure.cn";

        System.out.printf("key vault name = %s and kv uri = %s \n", keyVaultName, keyVaultUri);

        CertificateClient certificateClient = new CertificateClientBuilder()
            .vaultUrl(keyVaultUri)
            .credential(new DefaultAzureCredentialBuilder().build())
            .buildClient();

        String certificateName = "myCertificate";

        System.out.print("Creating a certificate in " + keyVaultName + " called '" + certificateName + " ... ");

        SyncPoller<CertificateOperation, KeyVaultCertificateWithPolicy> certificatePoller =
            certificateClient.beginCreateCertificate(certificateName, CertificatePolicy.getDefault());
        certificatePoller.waitForCompletion();

        System.out.print("done.");
        System.out.println("Retrieving certificate from " + keyVaultName + ".");

        KeyVaultCertificate retrievedCertificate = certificateClient.getCertificate(certificateName);

        System.out.println("Your certificate's ID is '" + retrievedCertificate.getId() + "'.");
        System.out.println("Deleting your certificate from " + keyVaultName + " ... ");

        SyncPoller<DeletedCertificate, Void> deletionPoller = certificateClient.beginDeleteCertificate(certificateName);
        deletionPoller.waitForCompletion();

        System.out.print("done.");
    }
}

后续步骤

在本快速入门中,你创建了一个密钥保管库、创建了一个证书、检索了该证书,然后将它删除了。 若要详细了解密钥保管库以及如何将其与应用程序集成,请继续阅读以下文章。