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

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

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

  • Apache Http 组件

  • OkHttp 3

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

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

  • Reactor Netty(内蒂反应堆)

  • Apache Http 组件

  • 码头

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

Java 的内置HttpURLConnection

Java 的内置功能开箱即用,无需额外的 配置。使用时有 SSL 配置方面的限制。 Spring Vault不会像以前那样应用自定义的SSL配置 需要对 JVM 进行深度重新配置。此配置将影响所有 依赖于默认 SSL 上下文的组件。配置 SSL 设置需要您提供这些设置作为系统属性。有关更多详细信息,请参阅自定义 JSSEHttpURLConnectionHttpURLConnectionHttpURLConnection

外部客户端

您可以使用外部客户端访问保险柜的 API。只需添加以下选项之一 依赖项。如果使用 Spring Vault 的依赖关系 BOM,则可以省略版本号

例 1.Apache Http 组件依赖项
<dependency>
  <groupId>org.apache.httpcomponents.client5</groupId>
  <artifactId>httpclient5</artifactId>
</dependency>
Apache HttpClient 的线路日志记录可以通过日志记录配置启用。请确保不要意外启用线路日志记录,因为日志可能会以纯文本形式公开应用程序与保险柜之间的流量(令牌和机密)。
例 2.正方形 OkHttp 3
<dependency>
  <groupId>com.squareup.okhttp3</groupId>
  <artifactId>okhttp</artifactId>
</dependency>
例 3.Reactor Netty(内蒂反应堆)
<dependency>
  <groupId>io.projectreactor.netty</groupId>
  <artifactId>reactor-netty</artifactId>
</dependency>
例 4.Apache Http 组件反应式依赖关系
<dependency>
  <groupId>org.apache.httpcomponents.core5</groupId>
  <artifactId>httpcore5-reactive</artifactId>
</dependency>
例 5.码头
<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-reactive-httpclient</artifactId>
</dependency>
Apache HttpClient 的线路日志记录可以通过日志记录配置启用。请确保不要意外启用线路日志记录,因为日志可能会以纯文本形式公开应用程序与保险柜之间的流量(令牌和机密)。

Vault Client SSL配置

可以通过设置各种属性来配置 SSL。 您可以将任一设置为配置 JVM 范围的 SSL 设置或配置为仅为 Spring Vault 设置 SSL 设置。SslConfigurationjavax.net.ssl.trustStoreSslConfiguration

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"))
1 完整配置。
2 仅配置信任存储设置。
3 仅配置密钥存储设置。
4 仅配置密钥存储设置,并提供密钥配置。

请注意,仅当 Apache Http 组件或 OkHttp 客户端位于类路径上时,才能应用提供。SslConfiguration

SSL 配置还支持 PEM 编码的证书作为 Java 密钥库的替代方案。

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

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

1 完整配置。
2 仅配置信任存储设置。
3 仅配置密钥存储设置。
4 仅配置密钥存储设置,并提供密钥配置。