我们有一个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证书验证-这也对我们有用吗?

最佳答案

有特定于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

10-07 20:50