客户端支持
Spring Vault 支持各种 HTTP 客户端来访问 Vault 的 HTTP API。Spring Vault 使用 RestTemplate 作为访问 Vault 的主要接口。专门的客户端支持源于仅限于 Spring Vault 客户端组件的定制 SSL 配置。
Spring Vault 支持以下 HTTP 命令式客户端
- 
Java 内置的 HttpURLConnection(如果没有其他可用客户端,则为默认客户端)
- 
Apache Http Components 
- 
OkHttp 3 
Spring Vault 的响应式集成支持以下响应式 HTTP 客户端
- 
Java 内置的响应式 HttpClient(如果没有其他可用客户端,则为默认客户端)
- 
Reactor Netty 
- 
Apache Http Components 
- 
Jetty 
使用特定客户端需要在类路径上提供相应的依赖,以便 Spring Vault 可以使用可用的客户端与 Vault 通信。
外部客户端
您可以使用外部客户端访问 Vault 的 API。只需将以下依赖之一添加到您的项目。如果使用Spring Vault 的依赖 BOM,则可以省略版本号。
<dependency>
  <groupId>org.apache.httpcomponents.client5</groupId>
  <artifactId>httpclient5</artifactId>
</dependency>| Apache HttpClient 的线日志可以通过日志配置启用。请确保不要意外启用线日志,因为日志可能会以明文形式暴露应用程序和 Vault 之间的流量(令牌和秘密)。 | 
<dependency>
  <groupId>com.squareup.okhttp3</groupId>
  <artifactId>okhttp</artifactId>
</dependency><dependency>
  <groupId>io.projectreactor.netty</groupId>
  <artifactId>reactor-netty</artifactId>
</dependency><dependency>
  <groupId>org.apache.httpcomponents.core5</groupId>
  <artifactId>httpcore5-reactive</artifactId>
</dependency><dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-reactive-httpclient</artifactId>
</dependency>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"))| 1 | 完整配置。 | 
| 2 | 仅配置信任库设置。 | 
| 3 | 仅配置密钥库设置。 | 
| 4 | 仅配置密钥库设置并提供密钥配置。 | 
请注意,提供 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);PEM 文件可以包含一个或多个证书(-----BEGIN CERTIFICATE----- 和 -----END CERTIFICATE----- 块)。添加到底层 KeyStore 的证书使用完整的subject name作为别名。