gpt4 book ai didi

spring-boot - 将证书从 Azure KeyVault 获取到 Kotlin/SpringBoot 中的 Keystore 以用于传出请求

转载 作者:行者123 更新时间:2023-12-02 06:53:38 28 4
gpt4 key购买 nike

对于某些 API 请求,我需要在后端提供证书。目前,.p12 在存储库中进行版本控制,并在初始化时加载到 WebClient 中,如下所示:

private fun getWebClient(): WebClient {
val ks: KeyStore = KeyStore.getInstance("PKCS12")
ks.load(ClassPathResource("keystore.p12").inputStream, config.trustStorePassword.toCharArray())
val kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm())
kmf.init(ks, config.trustStorePassword.toCharArray())

val sslContext = SslContextBuilder
.forClient()
.keyManager(kmf)
.build()

val httpClient: HttpClient = HttpClient.create().secure { sslSpec -> sslSpec.sslContext(sslContext) }

return WebClient
.builder()
.baseUrl(config.BaseUrl)
.clientConnector(ReactorClientHttpConnector(httpClient))
.build()
}

我想更改它,因为后端已部署到 Azure AppService。我已经创建了一个 KeyVault 并导入了证书,并通过托管身份授予了对 AppService 的访问权限。

我目前很难从 KeyVault 加载 Spring Boot 中的 keystore 。作为引用,我试图遵循 https://learn.microsoft.com/en-us/azure/developer/java/spring-framework/configure-spring-boot-starter-java-app-with-azure-key-vault-certificates .

它使用了 azure.keyvault.uri 属性,该属性显然已被弃用,因此我使用 spring.cloud.azure.keyvault.certificate.endpoint

文档还指出:

KeyStore azureKeyVaultKeyStore = KeyStore.getInstance("AzureKeyVault");
KeyVaultLoadStoreParameter parameter = new KeyVaultLoadStoreParameter(
System.getProperty("azure.keyvault.uri"));
azureKeyVaultKeyStore.load(parameter);
SSLContext sslContext = SSLContexts.custom()
.loadTrustMaterial(azureKeyVaultKeyStore, null)
.build();

但是,我无法解析类 KeyVautLoadStoreParameter。

我正在使用 Spring Boot 2.7.7 和

implementation("com.azure.spring:spring-cloud-azure-starter:4.5.0")
implementation("com.azure.spring:spring-cloud-azure-starter-keyvault:4.5.0")

任何有关加载证书和配置 WebClient 的帮助将不胜感激。

最佳答案

  • 您可以做的是在 azure AD 中创建应用注册,然后通过 azure keyvault 中的访问策略授予对此应用注册的访问权限。

  • 现在从应用程序注册中收集 clientId 、 Tenant Id 和 client Secret enter image description here

  • certificates&secret 选项卡中创建 key ,然后单击“新注册”。 enter image description here

  • 现在按以下格式创建 application.yaml 文件

  
server:
ssl:
key-alias: TestCertificate
key-store-type: AzureKeyVault
trust-store-type: AzureKeyVault
port: 8443
azure:
keyvault:
uri: <KEYVAULT URL>
client-id: <CLIENT_ID FROM APP REGISTRATIOM>
client-secret: <CLIENT_SECRET FROM APP REGISTRATIOM>
enabled: true
tenant-id: <TENANT_ID FROM APP REGISTRATIOM>
  • 现在,您可以使用以下程序从 Azure Key Vault 导入所有凭据。
KeyStore azureKeyVaultKeyStore = KeyStore.getInstance("AzureKeyVault");

KeyVaultLoadStoreParameter parameter = new KeyVaultLoadStoreParameter(
System.getProperty("azure.keyvault.uri"),
System.getProperty("azure.keyvault.tenant-id"),
System.getProperty("azure.keyvault.client-id"),
System.getProperty("azure.keyvault.client-secret")
);
azureKeyVaultKeyStore.load(parameter);
SSLContext sslContext = SSLContexts.custom()
.loadTrustMaterial(azureKeyVaultKeyStore, null)
.build();

// Here I am cross check wether we have imported the certificate name " TestCertificate"

if(azureKeyVaultKeyStore.containsAlias("TestCertificate"))
{
System.out.println("The Certificate Exists ");
}
else {
System.out.println("Error Has Occured");
}

输出: enter image description here

关于spring-boot - 将证书从 Azure KeyVault 获取到 Kotlin/SpringBoot 中的 Keystore 以用于传出请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75182978/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com