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