SSL
Spring Boot は、安全な通信をサポートするために、いくつかの種類の接続に適用できる SSL 信頼マテリアルを構成する機能を提供します。プレフィックス spring.ssl.bundle
が付いた構成プロパティを使用して、信頼マテリアルと関連情報の名前付きセットを指定できます。
Java KeyStore ファイルを使用した SSL の構成
プレフィックス spring.ssl.bundle.jks
の付いた構成プロパティを使用すると、Java keytool
ユーティリティで作成され、JKS または PKCS12 形式の Java KeyStore ファイルに保存された信頼マテリアルのバンドルを構成できます。各バンドルには、バンドルを参照するために使用できるユーザー指定の名前があります。
組み込み Web サーバーを保護するために使用される場合、keystore
は通常、次の例に示すように、証明書と秘密鍵を含む Java KeyStore で構成されます。
プロパティ
YAML
spring.ssl.bundle.jks.mybundle.key.alias=application
spring.ssl.bundle.jks.mybundle.keystore.location=classpath:application.p12
spring.ssl.bundle.jks.mybundle.keystore.password=secret
spring.ssl.bundle.jks.mybundle.keystore.type=PKCS12
spring:
ssl:
bundle:
jks:
mybundle:
key:
alias: "application"
keystore:
location: "classpath:application.p12"
password: "secret"
type: "PKCS12"
クライアント側の接続を保護するために使用される場合、truststore
は通常、次の例に示すようにサーバー証明書を含む Java KeyStore で構成されます。
プロパティ
YAML
spring.ssl.bundle.jks.mybundle.truststore.location=classpath:server.p12
spring.ssl.bundle.jks.mybundle.truststore.password=secret
spring:
ssl:
bundle:
jks:
mybundle:
truststore:
location: "classpath:server.p12"
password: "secret"
サポートされているプロパティの完全なセットについては、JksSslBundleProperties
(Javadoc) を参照してください。
環境変数を使用してバンドルを構成する場合、バンドルの名前は常に小文字に変換されます。 |
PEM エンコードされた証明書を使用した SSL の構成
プレフィックス spring.ssl.bundle.pem
が付いた構成プロパティを使用して、PEM エンコードされたテキストの形式で信頼マテリアルのバンドルを構成できます。各バンドルには、バンドルを参照するために使用できるユーザー指定の名前があります。
組み込み Web サーバーを保護するために使用される場合、keystore
は通常、次の例に示すように証明書と秘密鍵を使用して構成されます。
プロパティ
YAML
spring.ssl.bundle.pem.mybundle.keystore.certificate=classpath:application.crt
spring.ssl.bundle.pem.mybundle.keystore.private-key=classpath:application.key
spring:
ssl:
bundle:
pem:
mybundle:
keystore:
certificate: "classpath:application.crt"
private-key: "classpath:application.key"
クライアント側の接続を保護するために使用される場合、truststore
は通常、次の例に示すようにサーバー証明書を使用して構成されます。
プロパティ
YAML
spring.ssl.bundle.pem.mybundle.truststore.certificate=classpath:server.crt
spring:
ssl:
bundle:
pem:
mybundle:
truststore:
certificate: "classpath:server.crt"
PEM コンテンツは、 次の例は、トラストストア証明書を定義する方法を示しています。
|
サポートされているプロパティの完全なセットについては、PemSslBundleProperties
(Javadoc) を参照してください。
環境変数を使用してバンドルを構成する場合、バンドルの名前は常に小文字に変換されます。 |
SSL バンドルの適用
プロパティを使用して構成すると、Spring Boot によって自動構成されるさまざまな種類の接続の構成プロパティで SSL バンドルを名前で参照できるようになります。詳細については、組み込み Web サーバー、データテクノロジ、および REST クライアントに関するセクションを参照してください。
SSL バンドルの使用
Spring Boot は、spring.ssl.bundle
プロパティを使用して構成された名前付きバンドルのそれぞれへのアクセスを提供する型 SslBundles
(Javadoc) の Bean を自動構成します。
SslBundle
(Javadoc) は、自動構成された SslBundles
(Javadoc) Bean から取得して、クライアントライブラリで SSL 接続を構成するために使用されるオブジェクトを作成するために使用できます。SslBundle
(Javadoc) は、これらの SSL オブジェクトを取得するための階層化されたアプローチを提供します。
getStores()
は、キーストアと信頼ストアのKeyStore
(標準 Javadoc) インスタンスへのアクセスと、必要なキーストアパスワードを提供します。getManagers()
は、KeyManagerFactory
(標準 Javadoc) およびTrustManagerFactory
(標準 Javadoc) インスタンス、およびそれらが作成するKeyManager
(標準 Javadoc) およびTrustManager
(標準 Javadoc) 配列へのアクセスを提供します。createSslContext()
は、新しいSSLContext
(標準 Javadoc) インスタンスを取得する便利な方法を提供します。
さらに、SslBundle
(Javadoc) は、使用されているキー、使用するプロトコル、SSL エンジンに適用する必要があるオプションに関する詳細を提供します。
次の例は、SslBundle
(Javadoc) を取得し、それを使用して SSLContext
(標準 Javadoc) を作成する方法を示しています。
Java
Kotlin
import javax.net.ssl.SSLContext;
import org.springframework.boot.ssl.SslBundle;
import org.springframework.boot.ssl.SslBundles;
import org.springframework.stereotype.Component;
@Component
public class MyComponent {
public MyComponent(SslBundles sslBundles) {
SslBundle sslBundle = sslBundles.getBundle("mybundle");
SSLContext sslContext = sslBundle.createSslContext();
// do something with the created sslContext
}
}
import org.springframework.boot.ssl.SslBundles
import org.springframework.stereotype.Component
@Component
class MyComponent(sslBundles: SslBundles) {
init {
val sslBundle = sslBundles.getBundle("mybundle")
val sslContext = sslBundle.createSslContext()
// do something with the created sslContext
}
}
SSL バンドルのリロード
SSL バンドルは、キーマテリアルが変更されたときに再ロードできます。バンドルを使用するコンポーネントは、リロード可能な SSL バンドルと互換性がある必要があります。現在、次のコンポーネントと互換性があります。
Tomcat Web サーバー
Netty Web サーバー
リロードを有効にするには、次の例に示すように、構成プロパティを介してオプトインする必要があります。
プロパティ
YAML
spring.ssl.bundle.pem.mybundle.reload-on-update=true
spring.ssl.bundle.pem.mybundle.keystore.certificate=file:/some/directory/application.crt
spring.ssl.bundle.pem.mybundle.keystore.private-key=file:/some/directory/application.key
spring:
ssl:
bundle:
pem:
mybundle:
reload-on-update: true
keystore:
certificate: "file:/some/directory/application.crt"
private-key: "file:/some/directory/application.key"
ファイルウォッチャーがファイルを監視し、ファイルが変更されると、SSL バンドルがリロードされます。これにより、消費側コンポーネントでのリロードがトリガーされます。Tomcat は、SSL 対応コネクター内の証明書をローテーションします。
spring.ssl.bundle.watch.file.quiet-period
プロパティを使用して、ファイルウォッチャーの静止期間 (変更が存在しないことを確認するため) を構成できます。