SSL/TLS サポート
Secure Sockets Layer/Transport Layer Security がサポートされています。NIO を使用する場合、JDK 5+ SSLEngine
機能を使用して、接続の確立後にハンドシェイクを処理します。NIO を使用しない場合、標準の SSLSocketFactory
および SSLServerSocketFactory
オブジェクトを使用して接続が作成されます。大幅なカスタマイズを可能にするために、多くの戦略インターフェースが提供されています。これらのインターフェースのデフォルト実装は、安全な通信を開始する最も簡単な方法を提供します。
入門
NIO を使用するかどうかに関係なく、接続ファクトリで ssl-context-support
属性を構成する必要があります。この属性は、必要なキーストアの場所とパスワードを記述する <Bean/> 定義を参照します。
SSL/TLS ピアには、それぞれ 2 つのキーストアが必要です。
ピアを識別するための秘密鍵と公開鍵のペアを含むキーストア
信頼されているピアの公開鍵を含むトラストストア。JDK で提供される
keytool
ユーティリティのドキュメントを参照してください。不可欠なステップは新しいキーペアを作成し、キーストアに保存します。
公開鍵をエクスポートします。
公開鍵をピアのトラストストアにインポートします。
他のピアについても繰り返します。
テストケースでは、両方のピアで同じキーストアを使用するのが一般的ですが、本番環境ではこれを避ける必要があります。 |
キーストアを確立した後、次のステップは、それらのロケーションを TcpSSLContextSupport
Bean に示し、その Bean への参照を接続ファクトリに提供することです。
次の例では、SSL 接続を構成します。
<bean id="sslContextSupport"
class="o.sf.integration.ip.tcp.connection.support.DefaultTcpSSLContextSupport">
<constructor-arg value="client.ks"/>
<constructor-arg value="client.truststore.ks"/>
<constructor-arg value="secret"/>
<constructor-arg value="secret"/>
</bean>
<ip:tcp-connection-factory id="clientFactory"
type="client"
host="localhost"
port="1234"
ssl-context-support="sslContextSupport" />
DefaultTcpSSLContextSupport
クラスには、オプションの protocol
プロパティもあり、SSL
または TLS
(デフォルト)にすることができます。
キーストアファイル名(最初の 2 つのコンストラクター引数)は、Spring Resource
抽象化を使用します。デフォルトでは、ファイルはクラスパスにありますが、file:
プレフィックスを使用してこれをオーバーライドできます(代わりにファイルシステムでファイルを検索します)。
バージョン 4.3.6 以降、NIO を使用する場合、接続ファクトリで ssl-handshake-timeout
(秒単位)を指定できます。このタイムアウト(デフォルトは 30 秒)は、データを待機する SSL ハンドシェイク中に使用されます。タイムアウトを超えると、プロセスが停止し、ソケットが閉じられます。
ホスト検証
バージョン 5.0.8 以降では、ホスト検証を有効にするかどうかを構成できます。バージョン 5.1 以降では、デフォルトで有効になっています。無効にするメカニズムは、NIO を使用しているかどうかによって異なります。
ホスト検証は、証明書が信頼されている場合でも、接続しているサーバーが証明書の情報と一致することを確認するために使用されます。
NIO を使用する場合、たとえば DefaultTcpNioSSLConnectionSupport
を構成します。
@Bean
public DefaultTcpNioSSLConnectionSupport connectionSupport() {
DefaultTcpSSLContextSupport sslContextSupport = new DefaultTcpSSLContextSupport("test.ks",
"test.truststore.ks", "secret", "secret");
sslContextSupport.setProtocol("SSL");
DefaultTcpNioSSLConnectionSupport tcpNioConnectionSupport =
new DefaultTcpNioSSLConnectionSupport(sslContextSupport, false);
return tcpNioConnectionSupport;
}
2 番目のコンストラクター引数は、ホスト検証を無効にします。次に、connectionSupport
Bean が NIO 接続ファクトリに挿入されます。
NIO を使用しない場合、構成は TcpSocketSupport
にあります。
connectionFactory.setTcpSocketSupport(new DefaultTcpSocketSupport(false));
繰り返しますが、コンストラクター引数はホスト検証を無効にします。