客戶端支援
Spring Vault 支援各種 HTTP 客戶端來訪問 Vault 的 HTTP API。Spring Vault 使用 RestTemplate
作為訪問 Vault 的主要介面。專門的客戶端支援源於僅限於 Spring Vault 客戶端元件的定製 SSL 配置。
Spring Vault 支援以下 HTTP 命令式客戶端
-
Java 內建的
HttpURLConnection
(如果沒有其他可用客戶端,則為預設客戶端) -
Apache Http Components
-
OkHttp 3
Spring Vault 的響應式整合支援以下響應式 HTTP 客戶端
-
Java 內建的響應式
HttpClient
(如果沒有其他可用客戶端,則為預設客戶端) -
Reactor Netty
-
Apache Http Components
-
Jetty
使用特定客戶端需要在類路徑上提供相應的依賴,以便 Spring Vault 可以使用可用的客戶端與 Vault 通訊。
外部客戶端
您可以使用外部客戶端訪問 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 | 僅配置金鑰庫設定並提供金鑰配置。 |
請注意,提供 SslConfiguration
僅在類路徑上存在 Apache Http Components 或 OkHttp 客戶端時適用。
SSL 配置還支援 PEM 編碼的證書作為 Java Key Store 的替代方案。
KeyStoreConfiguration keystore = KeyStoreConfiguration
.of(new ClassPathResource("ca.pem")).withStoreType("PEM");
SslConfiguration configuration = SslConfiguration.forTrustStore(keystore);
PEM 檔案可以包含一個或多個證書(-----BEGIN CERTIFICATE-----
和 -----END CERTIFICATE-----
塊)。新增到底層 KeyStore
的證書使用完整的subject name作為別名。