客戶端支援

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,則可以省略版本號碼

範例 1. Apache Http Components 依賴性
<dependency>
  <groupId>org.apache.httpcomponents.client5</groupId>
  <artifactId>httpclient5</artifactId>
</dependency>
Apache HttpClient 的 wire logging 可以透過記錄設定啟用。請確保不要意外啟用 wire logging,因為記錄可能會以純文字形式洩露您的應用程式與 Vault 之間的流量 (令牌和密碼)。
範例 2. Square OkHttp 3
<dependency>
  <groupId>com.squareup.okhttp3</groupId>
  <artifactId>okhttp</artifactId>
</dependency>
範例 3. Reactor Netty
<dependency>
  <groupId>io.projectreactor.netty</groupId>
  <artifactId>reactor-netty</artifactId>
</dependency>
範例 4. Apache Http Components 反應式依賴性
<dependency>
  <groupId>org.apache.httpcomponents.core5</groupId>
  <artifactId>httpcore5-reactive</artifactId>
</dependency>
範例 5. Jetty
<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 的憑證使用完整主體名稱作為別名。