客戶端支援
Spring Vault 支援各種 HTTP 用戶端,以存取 Vault 的 HTTP API。Spring Vault 使用 RestTemplate
作為存取 Vault 的主要介面。專用的用戶端支援源自於 自訂 SSL 設定,該設定僅適用於 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 內建的 HttpURLConnection
Java 內建的 HttpURLConnection
可直接使用,無需額外設定。使用 HttpURLConnection
在 SSL 設定方面存在限制。Spring Vault 不會套用 自訂 SSL 設定,因為這需要對 JVM 進行深度重新設定。此設定將影響所有依賴預設 SSL 環境的元件。使用 HttpURLConnection
設定 SSL 設定需要您將這些設定作為系統屬性提供。有關更多詳細資訊,請參閱 Customizing JSSE。
外部用戶端
您可以使用外部用戶端來存取 Vault 的 API。只需將以下其中一個依賴性新增至您的專案即可。如果使用 Spring Vault 的 Dependency BOM,則可以省略版本號碼
<dependency>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
</dependency>
Apache HttpClient 的 wire logging 可以透過記錄設定啟用。請確保不要意外啟用 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 用戶端 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 | 僅設定金鑰儲存庫設定,並提供金鑰設定。 |
請注意,僅當您的類別路徑上存在 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
的憑證使用完整主體名稱作為別名。