我们有一个 java 客户端(mule 应用程序),它使用 hornetq 客户端(v2.3.25.SP20)通过 JNDI 命名服务器(端口 1099)连接到 HornetQ 远程服务器。 使用 SSL 保护连接。驱动程序需要显式设置 javax.net.ssl.trustStore 属性。否则,它找不到信任库。
我们想为 session 指定一个自定义信任库。 但是设置全局属性 javax.net.ssl.trustStore 可能会影响其他应用程序。因此,我们正在寻找替代方案。
我编写了一个指向自定义信任库的自定义信任管理器 (X509TrustManager)。但问题是它仅用于建立与 JNDI 服务器的连接。然后,实际连接对象从远程服务器获取信任库位置(当然,如果未设置 javax.net.ssl.trustStore)。
产生错误HQ212007:
connector.create or connectorFactory.createConnector should never throw an exception, implementation is badly behaved, but we will deal with it anyway.
Unable to create NettyConnector for myserver:4447
Failed to find a store at remote server keystore location
谷歌搜索错误代码,我发现描述的问题非常相似,但未提供解决方案 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
关于ssl - 如何在通过 JNDI 命名服务器连接时为 Hornetq 客户端指定本地自定义 SSL 信任库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55407434/