Client support
Spring Vault 支持各种 HTTP 客户端来访问 Vault 的 HTTP API。Spring Vault 使用 {spring-framework-docs}integration.html#rest-resttemplate[RestTemplate
] 作为访问 Vault 的主要接口。专用客户端支持源自 customized SSL configuration ,它仅限于 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’s builtin HttpURLConnection
Java 的内置 HttpURLConnection
可开箱即用,无需其他配置。使用 HttpURLConnection
时,SSL 配置存在一定限制。Spring Vault 不会应用 customized SSL configuration ,因为它需要对 JVM 进行深度重新配置。此配置将影响所有依赖于默认 SSL 上下文的组件。使用 HttpURLConnection
配置 SSL 设置要求您将这些设置作为系统属性提供。请参阅 Customizing JSSE 以了解更多详情。
External Clients
你可以使用外部客户端来访问 Vault 的 API。只需将以下依赖项之一添加到你的项目中。如果你使用 Spring Vault’s Dependency BOM,则可以省略版本号。
<dependency>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
</dependency>
Apache HttpClient 的 wire logging 可以通过日志记录配置来启用。确保不要意外启用线路记录,因为日志可能会以纯文本形式公开你的应用程序和 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 Client SSL configuration
可以通过设置各种属性来使用 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 | Full configuration. |
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
的证书使用完整主题名作为别名。