【发布时间】:2023-01-22 22:46:58
【问题描述】:
对于某些 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 App Service。我已经创建了一个 KeyVault 并导入了证书,并通过托管身份授予了对应用服务的访问权限。
我目前正在努力从 KeyVault 加载 Spring Boot 中的密钥库。作为参考,我正在尝试关注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 的任何帮助,我们将不胜感激。
【问题讨论】:
标签: spring-boot azure ssl-certificate webclient azure-keyvault