客户端支持
Spring Vault 支持各种 HTTP 客户端来访问 Vault 的 HTTP API。Spring Vault 使用 RestTemplate 作为访问 Vault 的主要接口。 专用客户端支持源于 自定义的 SSL 配置 ,该配置仅限于 Spring Vault 的客户端组件。
Spring Vault 支持以下 HTTP 命令式客户端:
-
Java的内置
HttpClient(如果没有其他可用客户端,则为默认客户端) -
Apache HttpComponents
-
Reactor Netty
-
Jetty
Spring Vault 的响应式集成支持以下响应式 HTTP 客户端:
-
Java 的内置响应式
HttpClient(如果没有其他客户端可用时的默认客户端) -
Apache HttpComponents
-
Reactor Netty
-
Jetty
使用特定客户端需要在类路径上提供相应的依赖项,这样 Spring Vault 才能使用可用的客户端与 Vault 进行通信。
外部客户端
您可以使用外部客户端访问 Vault 的 API。只需将以下依赖项之一添加到您的项目中。如果使用 Spring Vault 的依赖项 BOM,则可以省略版本号。
<dependency>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
</dependency>
| Apache HttpClient的线路日志记录可以通过日志配置启用。请确保不要意外启用线路日志记录,因为日志可能会以明文形式暴露您的应用程序与Vault之间的流量(Tokens和密钥)。 |
<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 Client SSL 配置
可以使用SslConfiguration通过设置各种属性来配置SSL。 您可以设置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位于您的类路径中时才能应用。
SSL 配置还支持使用 PEM 编码的证书作为 Java 密钥库的替代方案。
KeyStoreConfiguration keystore = KeyStoreConfiguration
.of(new ClassPathResource("ca.pem")).withStoreType("PEM");
SslConfiguration configuration = SslConfiguration.forTrustStore(keystore);
PEM 文件可能包含一个或多个证书(由 -----BEGIN CERTIFICATE----- 和 -----END CERTIFICATE----- 组成的块)。添加到基础 KeyStore 的证书使用完整的主体名称作为别名。