我有一台服务器,我希望通过SSL连接,然后监听数据。我有一个Camel路由设置(通过Spring),其Netty4端点如下:
<camel:endpoint id="sslEndpoint" uri="netty4:tcp://{{server.host}}:{{server.port}}">
<camel:property key="clientMode" value="true" />
<camel:property key="needClientAuth" value="true" />
<camel:property key="sync" value="false" />
<camel:property key="ssl" value="true" />
<camel:property key="keyStoreResource" value="file:{{server.keystore}}" />
<camel:property key="trustStoreResource" value="file:{{server.truststore}}" />
<camel:property key="passphrase" value="{{server.passphrase}}" />
</camel:endpoint>
路由使用Java配置,此端点为路由的from
部分:
public class MyRoute extends RouteBuilder {
@Override
public void configure() {
from("ref:sslEndpoint")
.to("log:MyLog?level=DEBUG");
}
}
默认情况下,from
端点将创建NettyConsumer
,它充当服务器,因此在端点上指定clientMode=true
。这在使用普通TCP连接时很荣幸(它确实作为客户端连接,并接收从服务器发送给它的数据)。但是,使用SSL时,不会启动SSL握手,这意味着服务器不会发送任何数据。
我已经了解了Camel Netty4代码,关键问题在于DefaultServerInitializerFactory
,其中配置了新的SSL连接 - SSLEngine
具有硬编码setUseClientMode(false)
。在此处粘贴断点并将调用更改为true
确实会导致Netty连接到服务器,启动SSL握手并开始使用收到的数据。
所以我的问题有两个:
clientMode
属性吗?