我已经在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,您可以在其中找到证书内容。使用这种方法,您不必在任何地方指定凭据。