当前位置: 首页 > 知识库问答 >
问题:

如何使用Java获取Azure KeyVault中存储的证书

葛承德
2023-03-14

我在Azure Keyvault中存储了一个.pfx文件。我有“证书标识符”、“密钥标识符”、“秘密标识符”的值。我想在java程序中使用.pfx文件。我怎么才能从KeyVault取文件?

KeyVaultClient keyVaultClient = new KeyVaultClient(credentials);
keyVaultClient.getCertificate(this.keyVaultUri, certificateName, '');
KeyStore keyStore = KeyStore.getInstance("JKS");

//I have to get this .pfx file from Azure Keyvault

keyStore.load(new FileInputStream(".pfx file"), 
keyPassphrase.toCharArray());

SSLContext sslContext = SSLContexts.custom()
    .loadKeyMaterial(keyStore, keyPassphrase.toCharArray())
    .build();

HttpClient httpClient = 
HttpClients.custom().setSSLContext(sslContext).build();

共有1个答案

韦衡
2023-03-14

作为将来的参考,如果您的Java应用程序运行在App Service或任何其他具有托管标识的Azure资源中,那么有一种更简单的方法可以做到这一点:

首先启用指定资源的系统分配的托管标识或用户分配的托管标识。使用您在启用托管标识时获得的对象ID,在密钥库的访问策略中指定它&为它分配必要的权限。在这种情况下,您将为托管标识分配一个“get”的证书访问策略。配置完所有这些之后,您需要在您的application.properties中指定keyvault url。

azure.keyvault.uri=#keyvault

    null
     import com.microsoft.azure.AzureEnvironment;
     import com.microsoft.azure.credentials.AppServiceMSICredentials;
     import com.microsoft.azure.credentials.AzureTokenCredentials;
     import com.microsoft.azure.keyvault.models.CertificateBundle;

    AzureTokenCredentials credentials = new AppServiceMSICredentials(AzureEnvironment.AZURE);
    KeyVaultClient keyVaultClient = new KeyVaultClient(credentials);
    CertificateBundle certificateBundle = KeyVaultClient.getCertificate(certificateIdentifier);

使用该方法,当您调用KeyVaultClient.getCertifice时,它将返回一个CertificateBundle,您可以在其中找到证书内容。

使用这种方法,您不必在任何地方指定凭据。

 类似资料:
  • 在尝试使用AzureKeyVault保护密钥时,我遇到以下错误: 00:01:41错误]读取钥匙圈时出错。微软蔚蓝色的钥匙库。模型。KeyVaultErrorException:操作在Microsoft返回了无效的状态代码“禁止”。蔚蓝色的钥匙库。KeyVault客户端。WrapkeyWithTtpMessageAsync(String Vault BaseUrl、String keyName、S

  • 在使用JDBC处理SQL Server存储过程时,我偶尔会遇到两种形式的奇怪行为: 问题1:我在SQL Server Management Studio(SSMS)中运行一个存储过程,它返回一个结果集。然而,当我试着 我有个例外 com.microsoft.sqlserver.jdbc.sqlserverexception:语句未返回结果集。 问题2:我在SSMS中运行了一个存储过程,它引发了一个

  • 我有一个Java服务器应用程序,它通过TLS从GRPC客户端获取数据并在服务器上处理。现在我想使用多个客户端。要向客户端分配接收到的事件,我想读取客户端证书并使用证书的DN分配事件。如何获取客户端证书? 我发现这个构建服务器:https://github.com/grpc/grpc-java/blob/master/SECURITY.md#mutual-tls 然后你应该实现一个服务器拦截器 }

  • 我有一个JTable,我可以在其中添加具有几个属性的用户,如年龄、名称等。这起作用了,用户被添加到我的arraylist和JTable中。现在我想要的是,当我选择JTable行时,能够获得存储在用户的arrayList中的对象,以便我可以修改或删除它们。 有谁能帮我一下吗?谢谢!

  • 我尝试了堆栈溢出的大部分答案,它们给出了我的.java文件不存在的路径。如何获取我的文件实际存在或存在的路径? 假设我的java文件名为,其位置为。所以我想打印路径。 我将文件部署到某个服务器,然后在那里运行它,无论我想打印路径,我都会得到这样的位置,其中没有文件。

  • 问题内容: 我不知道自己在做什么错,但是如果不先从系统中完全删除旧容器,就无法从注册表中使用最新映像。即使docker- compose pull已获取较新的映像,它似乎仍在使用先前启动的映像。 我研究了如何使docker-compose始终从新映像重新创建容器?这似乎与我的问题类似,但是那里提供的解决方案都不适合我,因为我正在寻找可以在生产服务器上使用的解决方案,因此我不想在启动它们之前先删除所