クライアントサポート
Spring Vault は、Vault の HTTP API にアクセスするためのさまざまな HTTP クライアントをサポートしています。Spring Vault は、Vault にアクセスするプライマリインターフェースとして RestTemplate
を使用します。専用クライアントサポートは、Spring Vault のクライアントコンポーネントのみを対象とするカスタマイズされた SSL 構成から始まります。
Spring Vault は、次の HTTP 命令型クライアントをサポートしています。
Java の組み込み
HttpURLConnection
(他に利用可能なクライアントがない場合のデフォルトのクライアント)Apache Http コンポーネント
OkHttp 3
Spring Vault のリアクティブ統合は、次のリアクティブ HTTP クライアントをサポートします。
Java の組み込みリアクティブ
HttpClient
(他に利用可能なクライアントがない場合のデフォルトのクライアント)Reactor Netty
Apache Http コンポーネント
Jetty
特定のクライアントを使用するには、Spring Vault が Vault との通信に使用可能なクライアントを使用できるように、クラスパス上で使用可能な依存関係が必要です。
Java の組み込み HttpURLConnection
Java の組み込み HttpURLConnection
は、追加の構成なしですぐに使用できます。HttpURLConnection
の使用には、SSL 構成に関する制限があります。Spring Vault は、JVM の詳細な再構成が必要となるため、カスタマイズされた SSL 構成を適用しません。この構成は、デフォルトの SSL コンテキストに依存するすべてのコンポーネントに影響します。HttpURLConnection
を使用して SSL 設定を構成するには、これらの設定をシステムプロパティとして指定する必要があります。詳細については、JSSE のカスタマイズ [Oracle] を参照してください。
外部クライアント
外部クライアントを使用して Vault の API にアクセスできます。次の依存関係のいずれかをプロジェクトに追加するだけです。Spring Vault の依存関係 BOM を使用する場合は、バージョン番号を省略できます。
<dependency>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
</dependency>
Apache HttpClient のワイヤログ [Apache] (英語) は、ログ設定を通じて有効にできます。ログによってアプリケーションと 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
(Javadoc) を使用して構成できます。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
(Javadoc) の提供は、Apache Http コンポーネントまたは OkHttp クライアントのいずれかがクラスパス上にある場合にのみ適用できることに注意してください。
SSL 構成は、Java キーストアの代替として PEM エンコードされた証明書もサポートします。
KeyStoreConfiguration keystore = KeyStoreConfiguration
.of(new ClassPathResource("ca.pem")).withStoreType("PEM");
SslConfiguration configuration = SslConfiguration.forTrustStore(keystore);
PEM ファイルには 1 つ以上の証明書 ( -----BEGIN CERTIFICATE-----
および -----END CERTIFICATE-----
のブロック) が含まれる場合があります。基礎となる KeyStore
に追加された証明書は、完全なサブジェクト名を別名として使用します。