此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Integration 6.5.1! |
SSL/TLS 支持
支持安全套接字层/传输层安全性。
使用蔚来时,JDK 5+SSLEngine
功能用于在建立连接后处理握手。
不使用蔚来时,标准SSLSocketFactory
和SSLServerSocketFactory
对象用于创建连接。
提供了许多策略接口以允许进行大量定制。
这些接口的默认实现提供了开始使用安全通信的最简单方法。
开始
无论是否使用蔚来,都需要配置ssl-context-support
属性。
此属性引用描述所需密钥存储的位置和密码的 <bean/> 定义。
SSL/TLS 对等体每个需要两个密钥存储:
-
包含用于标识对等方的私钥和公钥对的密钥库
-
一个信任库,其中包含受信任对等方的公钥。 请参阅文档
keytool
JDK 提供的实用程序。 基本步骤是-
创建一个新的密钥对并将其存储在密钥库中。
-
导出公钥。
-
将公密钥导入对等方的信任库。
-
对另一个对等方重复上述步骤。
-
在测试用例中,在两个对等节点上使用相同的密钥存储是很常见的,但在生产中应避免这种情况。 |
建立密钥存储后,下一步是向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
class 也有一个可选的protocol
属性,可以是SSL
或TLS
(默认值)。
密钥库文件名(前两个构造函数参数)使用 SpringResource
抽象化。
默认情况下,这些文件位于类路径上,但您可以使用file:
prefix (而是在文件系统上查找文件)。
从 4.3.6 版本开始,当您使用 NIO 时,您可以指定ssl-handshake-timeout
(以秒为单位)在连接工厂上。
此超时(默认值为 30 秒)在等待数据时的 SSL 握手期间使用。
如果超过超时,则停止进程并关闭套接字。
主机验证
从 5.0.8 版本开始,您可以配置是否启用主机验证。 从 5.1 版本开始,默认启用;禁用它的机制取决于您是否使用蔚来。
主机验证用于确保您连接到的服务器与证书中的信息匹配,即使证书是可信的。
使用蔚来时,配置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;
}
第二个构造函数参数禁用主机验证。
这connectionSupport
然后将 bean 注入 NIO 连接工厂。
不使用蔚来时,配置在TcpSocketSupport
:
connectionFactory.setTcpSocketSupport(new DefaultTcpSocketSupport(false));
同样,构造函数参数禁用主机验证。