如何让Camel / Netty4 SSL客户端发起握手?

时间:2016-09-19 13:39:35

标签: java ssl apache-camel netty

我有一台服务器,我希望通过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握手并开始使用收到的数据。

所以我的问题有两个:

  1. 如何最好地解决此问题并使SSL客户端启动握手?我错过了一些明显的东西吗?
  2. 这是Camel / Netty4中的错误,因为在我看来,SSL连接应该尊重端点的clientMode属性吗?

0 个答案:

没有答案