具有 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 功能只是配置问题。
总的来说,几乎没有什么不同:
- Connection URL 因此客户端通过 SSL 协议连接到正确的端口(
ssl://broker_url
而不是 tcp://broker_url
)。
- 连接工厂class - 可能与非 SSL 不同。
要使用 - Keystore and/or truststore。可以使用特定方法以编程方式设置这些文件的路径——但这种方法需要实施供应商特定代码。更好的选择是传递 KS/TS java 系统属性。 (即使没有任何准备,使用
-D
JVM 选项也可以完成。)
由于第 2 点和第 3 点因 JMS 代理的不同而不同,请参阅供应商的文档以了解更多详细信息。
此答案基于成功连接到 Apache ActiveMQ 和 Tibco EMS 的经验,包括相互证书身份验证。
目前,我已经使用标准 JMS API(仅 javax.jms.*
类)实现了一个非 SSL 安全客户端。当提供特定产品 JAR 和适当的类名时,它能够连接到任何 JMS 服务器。
有没有办法实现这种具有 SSL 连接功能的通用(独立于供应商)JMS 客户端?
我的研究不成功 - 我发现了几个使用 SSL 实现 JMS 的示例(例如 Novell JMS, ActiveMQ),但其中 none 避免直接使用特定于供应商的 类代码和实现差异很大。
使用 SSL 不需要更改客户端中的任何代码。添加 SSL 功能只是配置问题。
总的来说,几乎没有什么不同:
- Connection URL 因此客户端通过 SSL 协议连接到正确的端口(
ssl://broker_url
而不是tcp://broker_url
)。 - 连接工厂class - 可能与非 SSL 不同。 要使用
- Keystore and/or truststore。可以使用特定方法以编程方式设置这些文件的路径——但这种方法需要实施供应商特定代码。更好的选择是传递 KS/TS java 系统属性。 (即使没有任何准备,使用
-D
JVM 选项也可以完成。)
由于第 2 点和第 3 点因 JMS 代理的不同而不同,请参阅供应商的文档以了解更多详细信息。
此答案基于成功连接到 Apache ActiveMQ 和 Tibco EMS 的经验,包括相互证书身份验证。