我们需要将 SSL 客户端证书用于与 IBM MQ 服务器的 JMS 连接。我已经问过a question specifically for Websphere MQ但后来我了解到这主要是 JSSE 的工作,可以通过 Java 系统属性(例如 -Djavax.net.ssl.keyStore=<location of keyStore>
)进行配置。
但由于我们的 WildFly 9 AS 中应用程序的其他部分已经有 Activity 的 keystore ,我正在寻找一种方法来为 JMS 部分启用特定的 keystore - 这可以做到吗?
最佳答案
是的,在创建到队列管理器的安全连接时,JMS 应用程序的 MQ 类可以使用特定的 keystore 和信任库。
默认情况下,JMS 的 MQ 类将使用标准的 javax.net.ssl 系统属性来确定将哪个证书库用作 keystore 和信任库。但是,您可以通过构建自己的 javax.net.ssl.SSLSocketFactory
对象来自定义它,该对象在您的应用程序使用的 JMS 连接工厂上设置。
有关详细信息,请参阅知识中心:
https://www.ibm.com/support/knowledgecenter/SSFKSJ_9.0.0/com.ibm.mq.dev.doc/q032450_.htm
这通常意味着您必须以编程方式在应用程序代码中构建或更新 JMS 连接工厂,而不是仅通过管理和更新 JNDI 定义——这有点不幸。
我知道您已经声明您正在使用 WildFly 作为您选择的应用程序服务器,但只是为了让您知道,WebSphere Application Server (WSAS) 允许您在 JNDI 中配置 JMS 连接工厂并具有单独的 SSL/TLS 配置(包含可以与 JMS 资源关联的证书存储信息、密码套件等)。然后 WSAS 将负责创建 SSLSocketFactory 并在应用程序使用它创建 JMS 连接或上下文时在 JMS 连接工厂上适本地设置它。
因此,您可以继续通过 WSAS 管理控制台或 wsadmin 脚本以管理方式定义您的资源(JMS 和 SSL),而无需在应用程序中插入特定逻辑来执行此操作,这显然是首选。
WildFly(和其他 JEE 应用服务器)可能提供类似的功能,但我不知道。
关于java - 为 JMS 使用特定的 keystore ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46983191/