客户支持
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 的内置功能是开箱即用的,无需额外的
配置。使用时,SSL 配置存在限制。
Spring Vault 不会像以前那样应用自定义的 SSL 配置
需要对 JVM 进行深度重新配置。此配置将影响所有
组件。配置 SSL 设置时使用需要您将这些设置作为系统属性提供。有关更多详细信息,请参阅自定义 JSSE。HttpURLConnection
HttpURLConnection
HttpURLConnection
外部客户端
您可以使用外部客户端访问 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 配置
可以通过设置各种属性来使用 SslConfiguration
配置 SSL。
您可以设置其中任一来配置
JVM 范围的 SSL 设置或配置为仅为 Spring Vault 设置 SSL 设置。javax.net.ssl.trustStore
SslConfiguration
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