具有 SSL 连接功能的通用 JMS 客户端

Generic JMS Client with SSL connection capability

目前,我已经使用标准 JMS API(仅 javax.jms.* 类)实现了一个非 SSL 安全客户端。当提供特定产品 JAR 和适当的类名时,它能够连接到任何 JMS 服务器。

有没有办法实现这种具有 SSL 连接功能的通用(独立于供应商)JMS 客户端?

我的研究不成功 - 我发现了几个使用 SSL 实现 JMS 的示例(例如 Novell JMS, ActiveMQ),但其中 none 避免直接使用特定于供应商的 类代码和实现差异很大。

使用 SSL 不需要更改客户端中的任何代码。添加 SSL 功能只是配置问题。

总的来说,几乎没有什么不同:

  1. Connection URL 因此客户端通过 SSL 协议连接到正确的端口(ssl://broker_url 而不是 tcp://broker_url)。
  2. 连接工厂class - 可能与非 SSL 不同。
  3. 要使用
  4. Keystore and/or truststore。可以使用特定方法以编程方式设置这些文件的路径——但这种方法需要实施供应商特定代码。更好的选择是传递 KS/TS java 系统属性。 (即使没有任何准备,使用 -D JVM 选项也可以完成。)

由于第 2 点和第 3 点因 JMS 代理的不同而不同,请参阅供应商的文档以了解更多详细信息。


此答案基于成功连接到 Apache ActiveMQ 和 Tibco EMS 的经验,包括相互证书身份验证。