客戶端支援
Spring Vault 支援各種 HTTP 客戶端來訪問 Vault 的 HTTP API。Spring Vault 使用 RestTemplate 作為訪問 Vault 的主要介面。專門的客戶端支援源於 定製的 SSL 配置,該配置僅限於 Spring Vault 的客戶端元件。
Spring Vault 支援以下 HTTP 命令式客戶端
-
Java 內建的
HttpClient(如果沒有其他客戶端可用,則為預設客戶端) -
Apache Http Components
-
Reactor Netty
-
Jetty
Spring Vault 的反應式整合支援以下反應式 HTTP 客戶端
-
Java 內建的反應式
HttpClient(如果沒有其他客戶端可用,則為預設客戶端) -
Apache Http Components
-
Reactor Netty
-
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>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 配置
可以透過設定各種屬性,使用 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 | 完整配置。 |
| 2 | 僅配置信任庫設定。 |
| 3 | 僅配置金鑰庫設定。 |
| 4 | 僅配置帶金鑰配置的金鑰庫設定。 |
請注意,提供 SslConfiguration 只能在類路徑中存在 Apache Http Components 時應用。
SSL 配置還支援 PEM 編碼的證書作為 Java 金鑰庫的替代方案。
KeyStoreConfiguration keystore = KeyStoreConfiguration
.of(new ClassPathResource("ca.pem")).withStoreType("PEM");
SslConfiguration configuration = SslConfiguration.forTrustStore(keystore);
PEM 檔案可能包含一個或多個證書(由 -----BEGIN CERTIFICATE----- 和 -----END CERTIFICATE----- 組成的程式碼塊)。新增到底層 KeyStore 的證書使用完整的主題名稱作為別名。