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

标签 ssl jms hornetq

我们有一个 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/

相关文章:

jboss - 如何检查集群在两个不同的 JBoss 服务器之间工作

chat - 将 Rabbitmq 或 Hornetq 用于高流量聊天组件

java - 带有JDK11的Kubernetes中的Spring Boot随机 "SSLException: Connection reset"

c# - BufferNotEnough 无法创建 SSL/TLS 安全通道

java - Spring - JMS,在 JMS activemq 服务器启动/停止几次后,监听器服务器抛出 java.io.EOFException,然后不连接到正在运行的 JMS

web-services - JMS/JAXM/JAX RPC/Web Service/JAX-WS 有什么区别?

hornetq - 如何拒绝大于 100 MB HornetQ 的邮件

ssl - 将 SSL 与 Playframework 结合使用

java - 限制基于 Java 的 Web 服务器 TLS 协议(protocol)以供 Wireshark 检查

java - 有没有办法强制使用 JMS 消息选择器?