HTTP 客户端支持
Spring Vault 支持各种 HTTP 客户端来访问 Vault 的 HTTP API。Spring Vault 使用 VaultClient 作为访问 Vault 的主要接口。VaultClient 设计为可扩展的,并允许基于类似于 RestClient 的设计插入不同的 HTTP 客户端。专门的客户端支持源于定制 SSL 配置,该配置仅作用于 Spring Vault 的客户端组件。
Spring Vault 支持以下命令式 HTTP 客户端:
- Java 内置的
HttpClient(如果没有其他可用客户端,则为默认客户端) - Apache Http Components
- Reactor Netty
- Jetty
Spring Vault 的响应式集成支持以下响应式 HTTP 客户端:
- Java 内置的响应式
HttpClient(如果没有其他可用客户端,则为默认客户端) - Apache Http Components
- Reactor Netty
- Jetty
使用特定客户端需要相应的依赖在 classpath 上可用,以便 Spring Vault 可以使用可用的客户端与 Vault 通信。
Java 内置的 HttpClient
Java 内置的 HttpClient 自 Java 11 起即可开箱即用,无需额外的依赖。
外部客户端
你可以使用外部客户端访问 Vault 的 API。只需将以下依赖之一添加到你的项目中。
示例 1:Apache Http Components 依赖
<dependency>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
</dependency>
Apache HttpClient 的 wire 日志可以通过日志配置启用。请确保不要意外启用 wire 日志,因为日志可能会以明文形式暴露你的应用程序与 Vault 之间的流量(令牌和机密)。
示例 2:Reactor Netty
<dependency>
<groupId>io.projectreactor.netty</groupId>
<artifactId>reactor-netty</artifactId>
</dependency>
示例 3:Apache Http Components 响应式依赖
<dependency>
<groupId>org.apache.httpcomponents.core5</groupId>
<artifactId>httpcore5-reactive</artifactId>
</dependency>
示例 4:Jetty
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-reactive-httpclient</artifactId>
</dependency>
Vault Client SSL 配置
SSL 可以通过 SslConfiguration 设置各种属性来配置。你可以设置 javax.net.ssl.trustStore 来配置 JVM 范围的 SSL 设置,也可以配置 SslConfiguration 仅设置 Spring Vault 的 SSL 设置。
SslConfiguration sslConfiguration = SslConfiguration.create( 1
new FileSystemResource("client-cert.jks"), "changeit".toCharArray(),
new FileSystemResource("truststore.jks"), "changeit".toCharArray());
SslConfiguration.forTrustStore(new FileSystemResource("keystore.jks"), 2
"changeit".toCharArray())
SslConfiguration.forKeyStore(new FileSystemResource("keystore.jks"), 3
"changeit".toCharArray())
SslConfiguration.forKeyStore(new FileSystemResource("keystore.jks"), 4
"changeit".toCharArray(),
KeyConfiguration.of("key-password".toCharArray(),
"my-key-alias"))
完整配置。
仅配置信任库设置。
仅配置密钥库设置。
仅配置密钥库设置,并提供密钥配置。
请注意,提供 SslConfiguration 仅在 Apache Http Components 位于 classpath 上时才能应用。
SSL 配置还支持 PEM 编码的证书,作为 Java Key Store 的替代方案。
KeyStoreConfiguration keystore = KeyStoreConfiguration
.of(new ClassPathResource("ca.pem")).withStoreType("PEM");
SslConfiguration configuration = SslConfiguration.forTrustStore(keystore);
PEM 文件可以包含一个或多个证书(-----BEGIN CERTIFICATE----- 和 -----END CERTIFICATE----- 块)。添加到底层 KeyStore 的证书使用完整的主体名称作为别名。