通过JNDI命名服务器连接时如何为Hornetq客户端指定本地自定义SSL信任库

时间:2019-03-28 21:54:46

标签: ssl jms hornetq

我们有一个Java客户端(m子应用程序),它使用hornetq客户端(v2.3.25.SP20)通过JNDI命名服务器(端口1099)连接到HornetQ远程服务器。 使用SSL保护连接。驱动程序要求显式设置javax.net.ssl.trustStore属性。否则,它将找不到信任存储。

我们想为会话指定一个自定义信任库。 但是设置全局属性javax.net.ssl.trustStore可能会影响其他应用程序。因此,我们正在寻找替代方案。

我已经编写了一个指向自定义信任库的自定义信任管理器(X509TrustManager)。但是问题在于它仅用于与JNDI服务器建立连接。然后,实际的连接对象将从远程服务器获取信任库位置(当然,如果未设置javax.net.ssl.trustStore的话)。
产生错误HQ212007:

  

connector.create或connectorFactory.createConnector绝不能   抛出异常,执行不当,但是我们会处理   无论如何。

     

无法为myserver创建NettyConnector:4447
  无法在远程服务器密钥库位置

中找到商店

谷歌搜索错误代码,发现非常类似的问题,没有提供here解决方案。

那么,当通过JNDI连接时,是否还有另一种方法可以为hornetq客户端指定信任库的路径,从而不会影响在同一VM系统上运行的其他应用程序?或者,也许有一种方法可以完全禁用客户端上的SSL证书验证-这也对我们有用吗?

1 个答案:

答案 0 :(得分:1)

有特定于HornetQ的系统属性来设置SSL配置参数。签出the documentation for HornetQ 2.4.0

这些属性是在2.3.0.Final之后添加的,但被反向移植到2.3.x分支,这就是为什么它们在2.3.25.SP20中可用但在2.3.0.Final文档中没有记录的原因。

简而言之,您可以使用以下系统属性代替全局属性:

  • org.hornetq.ssl.keyStore
  • org.hornetq.ssl.keyStorePassword
  • org.hornetq.ssl.trustStore
  • org.hornetq.ssl.trustStorePassword