此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Vault 3.1.2! |
客户支持
Spring Vault 支持各种 HTTP 客户端访问 Vault 的 HTTP API。Spring Vault 使用RestTemplate
作为访问 Vault 的主接口。
专用客户端支持源自自定义的 SSL 配置,该配置的范围仅限于 Spring Vault 的客户端组件。
Spring Vault 支持以下 HTTP 命令式客户端:
-
Java 的内置
HttpURLConnection
(如果没有其他可用的客户端,则默认客户端) -
Apache Http 组件
-
OkHttp 3
Spring Vault 的反应式集成支持以下反应式 HTTP 客户端:
-
Java 的内置响应式
HttpClient
(如果没有其他可用的客户端,则默认客户端) -
Reactor Netty
-
Apache Http 组件
-
Jetty
使用特定客户端需要在 Classpath 上提供相应的依赖项 因此 Spring Vault 可以使用可用的 Client 端与 Vault 进行通信。
Java 的内置HttpURLConnection
Java 的内置HttpURLConnection
开箱即用,无需额外
配置。用HttpURLConnection
带有有关 SSL 配置的限制。
Spring Vault 不会像以前那样应用自定义的 SSL 配置
需要对 JVM 进行深度重新配置。此配置将影响所有
组件。配置 SSL 设置HttpURLConnection
要求您将这些设置作为 System Properties (系统属性) 提供。有关更多详细信息,请参阅自定义 JSSE。
外部客户端
您可以使用外部客户端访问 Vault 的 API。只需添加以下选项之一 dependencies 添加到您的项目中。如果使用 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 Client 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 客户端位于您的 class-path 上时,才能应用。
SSL 配置还支持 PEM 编码的证书,作为 Java 密钥存储的替代方案。
KeyStoreConfiguration keystore = KeyStoreConfiguration
.of(new ClassPathResource("ca.pem")).withStoreType("PEM");
SslConfiguration configuration = SslConfiguration.forTrustStore(keystore);
PEM 文件可能包含一个或多个证书(-----BEGIN CERTIFICATE-----
和-----END CERTIFICATE-----
).
添加到底层的证书KeyStore
使用完整的使用者名称作为别名。