跳到主要内容

客户端支持

DeepSeek V3 中英对照 Client support

Spring Vault 支持多种 HTTP 客户端来访问 Vault 的 HTTP API。Spring Vault 使用 RestTemplate 作为访问 Vault 的主要接口。专用的客户端支持源自于 自定义的 SSL 配置,该配置仅适用于 Spring Vault 的客户端组件。

Spring Vault 支持以下 HTTP 命令式客户端:

  • Java 内置的 HttpURLConnection(如果没有其他可用的客户端,则作为默认客户端)

  • Apache Http Components

  • OkHttp 3

Spring Vault 的响应式集成支持以下响应式 HTTP 客户端:

  • Java 内置的响应式 HttpClient(如果没有其他可用客户端,则为默认客户端)

  • Reactor Netty

  • Apache Http Components

  • Jetty

使用特定的客户端需要在类路径上提供相应的依赖项,以便 Spring Vault 可以使用可用的客户端与 Vault 进行通信。

Java 内置的 HttpURLConnection

Java 内置的 HttpURLConnection 无需额外配置即可直接使用。使用 HttpURLConnection 时,SSL 配置方面存在一定的限制。Spring Vault 不会应用自定义的 SSL 配置,因为这将需要对 JVM 进行深度重新配置。这种配置会影响所有依赖默认 SSL 上下文的组件。使用 HttpURLConnection 配置 SSL 设置时,需要将这些设置作为系统属性提供。更多详情请参见 自定义 JSSE

外部客户端

你可以使用外部客户端来访问 Vault 的 API。只需将以下依赖项之一添加到你的项目中。如果使用 Spring Vault 的依赖 BOM,可以省略版本号。

示例 1. Apache Http Components 依赖

<dependency>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
</dependency>
xml
备注

Apache HttpClient 的 wire logging 可以通过日志配置启用。请确保不要意外启用 wire logging,因为日志可能会以明文形式暴露应用程序与 Vault 之间的流量(令牌和密钥)。

示例 2. Square OkHttp 3

<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
</dependency>
xml

示例 3. Reactor Netty

<dependency>
<groupId>io.projectreactor.netty</groupId>
<artifactId>reactor-netty</artifactId>
</dependency>
xml

示例 4. Apache Http Components 响应式依赖

<dependency>
<groupId>org.apache.httpcomponents.core5</groupId>
<artifactId>httpcore5-reactive</artifactId>
</dependency>
xml

示例 5. Jetty

<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-reactive-httpclient</artifactId>
</dependency>
xml

Vault 客户端 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"))
java
  • 完整配置。

  • 仅配置信任库设置。

  • 仅配置密钥库设置。

  • 仅配置密钥库设置并提供密钥配置。

请注意,提供 SslConfiguration 只能在你的类路径中包含 Apache Http Components 或 OkHttp 客户端时应用。

SSL 配置还支持 PEM 编码的证书,作为 Java Key Store 的替代方案。

KeyStoreConfiguration keystore = KeyStoreConfiguration
.of(new ClassPathResource("ca.pem")).withStoreType("PEM");
SslConfiguration configuration = SslConfiguration.forTrustStore(keystore);
java

PEM 文件可能包含一个或多个证书(以 -----BEGIN CERTIFICATE----------END CERTIFICATE----- 为标志的块)。添加到基础 KeyStore 的证书会使用完整的主题名称作为别名。