客户端支持
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,则可以省略版本号
<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 | 仅配置密钥库设置,并提供密钥配置。 |
请注意,仅当 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
的证书使用完整主体名称作为别名。