|
该版本仍在开发中,尚未被视为稳定版本。如需获取最新的稳定版本,请使用Spring Vault 4.0.1! |
客户端支持
Spring Vault 支持各种 HTTP 客户端来访问 Vault 的 HTTP API。Spring Vault 使用 RestTemplate 作为访问 Vault 的主要接口。 专用客户端支持源于 自定义的 SSL 配置 ,该配置仅限于 Spring Vault 的客户端组件。
Spring Vault 支持以下 HTTP 命令式客户端:
-
Java的内置
HttpURLConnection(如果没有其他可用客户端,则为默认客户端) -
Apache HttpComponents
-
OkHttp 3
Spring Vault 的响应式集成支持以下响应式 HTTP 客户端:
-
Java 的内置响应式
HttpClient(如果没有其他客户端可用时的默认客户端) -
Reactor Netty
-
Apache HttpComponents
-
Jetty
使用特定客户端需要在类路径上提供相应的依赖项,这样 Spring Vault 才能使用可用的客户端与 Vault 进行通信。
Java的内置HttpURLConnection
Java 自带的 HttpURLConnection 开箱即用,无需额外配置。使用 HttpURLConnection 时在 SSL 配置方面存在一定的限制。 Spring Vault 不会应用 自定义的 SSL 配置,因为这需要对 JVM 进行深度重新配置。 这种配置会影响所有依赖默认 SSL 上下文的组件。使用 HttpURLConnection 配置 SSL 设置需要你将这些设置作为系统属性提供。 更多详细信息,请参见 自定义 JSSE。
外部客户端
您可以使用外部客户端访问 Vault 的 API。只需将以下依赖项之一添加到您的项目中。如果使用 Spring Vault 的依赖项 BOM,则可以省略版本号。
<dependency>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
</dependency>
| Apache HttpClient的线路日志记录可以通过日志配置启用。请确保不要意外启用线路日志记录,因为日志可能会以明文形式暴露您的应用程序与Vault之间的流量(Tokens和密钥)。 |
<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 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 | 仅配置提供密钥配置的密钥库设置。 |
请注意,只有在类路径中存在 Apache Http Components 或 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 的证书使用完整的主体名称作为别名。