我已经在Azure Keyvault中存储了一个.pfx文件。我具有“证书标识符”,“密钥标识符”,“秘密标识符”的值。我想在Java程序中使用.pfx文件。如何从Keyvault提取文件?

我搜索了互联网,发现我们可以使用Keyvault获得证书

KeyVaultClient keyVaultClient = new KeyVaultClient(credentials);
keyVaultClient.getCertificate(this.keyVaultUri, certificateName, '');

1)如何将凭据传递给KeyVaultClient?

2)我必须在KeyVaultClient中使用Azure登录凭据吗?
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();

最佳答案

供将来参考,如果您的Java应用程序在App Service或任何其他具有Managed Identity的Azure资源中运行,则有一种更简单的方法:

首先启用指定资源的系统分配的托管身份或用户分配的托管身份。使用在启用受管身份时获得的对象ID,在密钥库的访问策略中对其进行指定,并为其分配必要的权限。在这种情况下,您将为受管身份分配证书的“get”访问策略。配置完所有这些之后,您需要在application.properties中指定密钥库URL。
azure.keyvault.uri= # url of the keyvault
然后,在要获取证书的Java类中,执行以下操作:

  • 导入以下软件包:
  •      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);
    
    

    如果遵循前面的步骤,则此处的第一行将自动允许App Service通过Azure Keyvault进行身份验证。

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

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

    07-26 00:48