如需使用最新稳定版本,请使用 Spring Integration 7.0.4spring-doc.cadn.net.cn

SSL/TLS 支持

支持安全套接字层/传输层安全协议。 使用 NIO 时,JDK 5+ SSLEngine 功能用于在连接建立后处理握手过程。 不使用 NIO 时,使用标准的 SSLSocketFactorySSLServerSocketFactory 对象来创建连接。 提供了多种策略接口以允许进行大量自定义。 这些接口的默认实现提供了开始安全通信的最简单方式。spring-doc.cadn.net.cn

快速开始

无论您是否使用 NIO,都需要在连接工厂上配置 ssl-context-support 属性。 此属性引用一个 <bean/> 定义,该定义描述了所需密钥库的位置和密码。spring-doc.cadn.net.cn

SSL/TLS 对等方各自需要两个密钥库:spring-doc.cadn.net.cn

在测试用例中,双方使用相同的密钥库是常见的做法,但在生产环境中应避免这样做。

在建立密钥库之后,下一步是向 TcpSSLContextSupport bean 指示它们的位置,并向连接工厂提供对该 bean 的引用。spring-doc.cadn.net.cn

以下示例配置了一个 SSL 连接:spring-doc.cadn.net.cn

<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" />

The DefaultTcpSSLContextSupport 类还有一个可选的 protocol 属性,它可以是 SSLTLS(默认值)。spring-doc.cadn.net.cn

密钥库文件名(前两个构造函数参数)使用了 Spring Resource 抽象。 默认情况下,这些文件位于类路径上,但您可以使用 file: 前缀来覆盖此行为(以便在文件系统上查找文件)。spring-doc.cadn.net.cn

从 4.3.6 版本开始,当您使用 NIO 时,可以在连接工厂中指定一个 ssl-handshake-timeout(以秒为单位)。 此超时时间(默认值为 30 秒)在 SSL 握手期间等待数据时使用。 如果超过超时时间,进程将停止并关闭套接字。spring-doc.cadn.net.cn

主机验证

从 5.0.8 版本开始,您可以配置是否启用主机验证。 从 5.1 版本开始,默认启用;禁用该机制取决于您是否使用 NIO。spring-doc.cadn.net.cn

主机验证用于确保您连接的服务器与证书中的信息匹配,即使该证书是受信任的。spring-doc.cadn.net.cn

使用 NIO 时,配置 DefaultTcpNioSSLConnectionSupport,例如。spring-doc.cadn.net.cn

@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 连接工厂中。spring-doc.cadn.net.cn

当不使用 NIO 时,配置位于 TcpSocketSupport 中:spring-doc.cadn.net.cn

connectionFactory.setTcpSocketSupport(new DefaultTcpSocketSupport(false));

同样,构造函数参数会禁用主机验证。spring-doc.cadn.net.cn