java - 为 JMS 使用特定的 keystore

标签 java ssl jakarta-ee jms wildfly

我们需要将 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/

相关文章:

java - Spring aws-cloud SNS http端点确认订阅不起作用

java - 如何按值从 HashMap 中删除条目?

c# - 带有客户端证书的 Xamarin Forms https 抛出 WebException

delphi - 带 SSL 的 TCP/IP - Delphi 和 Indy10

spring - 使用 tomcat 7 部署时出现 slf4j 错误

java - 如何在不使用数组的情况下读取字符串并存储到不同的变量中

java - 当单击其中一列中的按钮时,Jtable 丢失多行选择

c# - 如何查询网站是否有SSL证书?

java - 用于 Java Web 应用程序的动态 LESS 编译器?

java - 为什么 UriInfo.getQueryParameters() 不解码 '+' ?