使用 Java 客户端连接到 MQ 通道:CERTLABL 错误

djhi89

我正在使用 Java 开发一个微服务,以通过 SSL 连接到 IBM Websphere MQ V8.0。但是,我在日志中看到此错误:

JMSCMQ0001:IBM MQ 调用失败,compcode '2'('MQCC_FAILED')原因'2059'('MQRC_Q_MGR_NOT_AVAILABLE')

在 MQ 端,错误是CSQX673E,原因是:

SSL 或 TLS 通道的通道名称配置为使用证书标签:cert-label。但是,远程对等方没有发送必要的信息来允许本地通道使用正确的证书。远程主机是 conn-id。

有人可以让我知道如何使用 Java 传递这个参数。

根据我的理解,CERTLABL不是证书的一部分。

乔什·麦克

请注意,MQ v8.0.0、v9.0.0 和 v9.1.0 知识中心中记录的以下信息相同。


IBM MQ 8.0.0 知识中心页面IBM MQ>安全>安全概述>IBM MQ 安全机制>IBM MQ 中的安全协议>SSL 或TLS 密钥存储库>数字证书标签中的IBM 文档,了解以下要求

IBM MQ 版本 8.0 支持在同一个队列管理器上使用多个证书,使用每个通道的证书标签属性。队列管理器的入站通道(例如,服务器连接或接收器)依赖于使用 TLS 服务器名称指示 (SNI) 检测通道名称,以便提供来自队列管理器的正确证书。

同一页面还记录了这一点:

请注意,入站通道(包括接收器、集群接收器、非限定服务器和服务器连接通道)仅在远程对等方的 IBM MQ 版本完全支持证书标签配置并且该通道使用 TLS CipherSpec 时才发送配置的证书。

在所有其他情况下,队列管理器 CERTLBL 参数确定发送的证书。特别是,以下只接收由队列管理器的 CERTLBL 参数配置的证书,而不管特定于通道的标签设置如何:

  • 所有当前的 Java 和 JMS 客户端。
  • IBM MQ 8.0 之前的版本。

IBM 还在 IBM MQ 8.0.0 知识中心页面IBM MQ>参考>配置参考>通道属性>按字母顺序排列的通道属性>证书标签 (CERTLABL) 中记录了类似信息

入站通道(包括 RCVR、CLUSRCVR、不合格的 SERVER 和 SVRCONN 通道)仅在远程对等方的 IBM® MQ 版本完全支持证书标签配置并且通道使用 TLS CipherSpec 时才会发送配置的证书。如果不是这种情况,队列管理器 CERTLBL 属性将确定发送的证书。此限制是因为入站通道的证书标签选择机制取决于并非在所有情况下都支持的 TLS 协议扩展。特别是,Java™ 客户端、JMS 客户端和 8.0 版之前的所有 IBM MQ 版本都不支持所需的协议扩展,并且只会接收由队列管理器 CERTLABL 属性配置的证书,而不管特定于通道的标签设置如何.


正如您所说,Java 8 确实支持 SNI,但显然 IBM 尚未在 IBM MQ Classes for Java 或 IBM MQ Classes for JMS 中实现该功能。

我能想到的一种可能的解决方案是,您可以找出 MQ 调用哪个底层函数来创建 TLS 会话并覆盖它以将 SNI 属性设置为 MQ 将在队列管理器上识别的值,代码如下:

SSLParameters params = sslSocket.getSSLParameters();
params.setServerNames(serverNames);
sslSocket.setSSLParameters(params);

IBM 在技术说明“ IBM WebSphere MQ:MQ 如何提供多个证书 (CERTLABL) 功能中记录了在 SNI 中传递通道名称的格式

MQ 使用的 SNI 地址基于所请求的通道名称,后跟“.chl.mq.ibm.com”后缀。

MQ 通道名称映射为有效的 SNI 名称,如下所示:

  • 大写字母 AZ 被折叠成小写
  • 数字 0 到 9 保持不变
  • 包括小写字母 az 在内的所有其他字符都将转换为其后跟连字符的 2 位十六进制 ASCII 字符代码。
  • 小写字母 a 到 z 分别映射到“61-”到“7a-”
  • 百分比 (%) 映射到“25-”
  • 连字符 (-) 映射到“2d-”
  • 点 (.) 映射到“2e-”
  • 正斜杠 (/) 映射到“2f-”
  • 下划线 (_) 映射到“5f-”

在 EBCDIC 平台上,通道名称在应用此映射之前转换为 ASCII。例如,通道名称“TO.QMGR1”映射到“to2e-qmgr1.chl.mq.ibm.com”的 SNI 地址。

相比之下,小写的通道名称“to.qmgr1”映射到“74-6f-2e-71-6d-67-72-1.chl.mq.ibm.com”的SNI地址。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何编写可以连接到IBM MQ AMQP通道的RabbitMQ Java客户端

来自分类Dev

使用C ++ API使用加密通道将mq客户端连接到mq服务器

来自分类Dev

MCA用户ID如何使用MQ Server连接通道授权客户端用户ID

来自分类Dev

如何使用MQ客户端连接到MQ Server队列管理器

来自分类Dev

使用VB.NET 4.5.1客户端连接到基于Java的Web服务时出现编组错误

来自分类Dev

如何使用Java JRedisGraph客户端连接到RedisGraph

来自分类Dev

如何使用Java传输客户端连接到ElasticSearch?

来自分类Dev

对 Java 客户端和 WebSphere MQ 使用 SSL 支持

来自分类Dev

可以通过直线连接到 hive,但不能通过 java。错误无法使用 JDBC Uri GSS 启动失败打开客户端传输

来自分类Dev

如何使用Java插件将客户端连接到mongodb?

来自分类Dev

通过Java客户端使用Spring 4通过WebSockets连接到Stomp

来自分类Dev

如何使用Java插件将客户端连接到mongodb?

来自分类Dev

使用Java客户端连接到在备用端口上运行的Couchbase

来自分类Dev

使用SAAJ的Java SOAP客户端中的错误

来自分类Dev

Java客户端连接错误:的ChangeCipherSpec消息顺序违法

来自分类Dev

Java-客户端在连接时给出错误

来自分类Dev

如何使Java客户端使用套接字连接到不在我的计算机上的服务器?

来自分类Dev

安卓不支持sunX509?Android 客户端使用 SSLsocket 连接到 Java 服务器

来自分类Dev

Nodejs和Java之间的连接。当Java的客户端连接到Node.js服务器时,它向我显示错误,

来自分类Dev

使用 websocket 连接的客户端连接到 memcached

来自分类Dev

具有Java客户端的IBM MQ AMS

来自分类Dev

如何通过 Java 显示 MQ 客户端列表?

来自分类Dev

无法从客户端连接到PostgreSQL-错误超时

来自分类Dev

Rabbit MQ Ctl - 连接到通道映射

来自分类Dev

使用即时客户端通过Python3(cx_Oracle)连接到Oracle数据库时,错误“ DPI-1047:无法找到64位Oracle客户端库”

来自分类Dev

简单的Android客户端,用于使用Retrofit来使用REST Web服务-为什么出现“无法连接到服务器”错误

来自分类Dev

从Java客户端连接到db2

来自分类Dev

为什么客户端在连接到ActiveMQ时会抛出java.io.IOException:无法识别传输方案:[failovertcp]错误?

来自分类Dev

Pentaho-使用瘦客户端连接到Carte

Related 相关文章

  1. 1

    如何编写可以连接到IBM MQ AMQP通道的RabbitMQ Java客户端

  2. 2

    使用C ++ API使用加密通道将mq客户端连接到mq服务器

  3. 3

    MCA用户ID如何使用MQ Server连接通道授权客户端用户ID

  4. 4

    如何使用MQ客户端连接到MQ Server队列管理器

  5. 5

    使用VB.NET 4.5.1客户端连接到基于Java的Web服务时出现编组错误

  6. 6

    如何使用Java JRedisGraph客户端连接到RedisGraph

  7. 7

    如何使用Java传输客户端连接到ElasticSearch?

  8. 8

    对 Java 客户端和 WebSphere MQ 使用 SSL 支持

  9. 9

    可以通过直线连接到 hive,但不能通过 java。错误无法使用 JDBC Uri GSS 启动失败打开客户端传输

  10. 10

    如何使用Java插件将客户端连接到mongodb?

  11. 11

    通过Java客户端使用Spring 4通过WebSockets连接到Stomp

  12. 12

    如何使用Java插件将客户端连接到mongodb?

  13. 13

    使用Java客户端连接到在备用端口上运行的Couchbase

  14. 14

    使用SAAJ的Java SOAP客户端中的错误

  15. 15

    Java客户端连接错误:的ChangeCipherSpec消息顺序违法

  16. 16

    Java-客户端在连接时给出错误

  17. 17

    如何使Java客户端使用套接字连接到不在我的计算机上的服务器?

  18. 18

    安卓不支持sunX509?Android 客户端使用 SSLsocket 连接到 Java 服务器

  19. 19

    Nodejs和Java之间的连接。当Java的客户端连接到Node.js服务器时,它向我显示错误,

  20. 20

    使用 websocket 连接的客户端连接到 memcached

  21. 21

    具有Java客户端的IBM MQ AMS

  22. 22

    如何通过 Java 显示 MQ 客户端列表?

  23. 23

    无法从客户端连接到PostgreSQL-错误超时

  24. 24

    Rabbit MQ Ctl - 连接到通道映射

  25. 25

    使用即时客户端通过Python3(cx_Oracle)连接到Oracle数据库时,错误“ DPI-1047:无法找到64位Oracle客户端库”

  26. 26

    简单的Android客户端,用于使用Retrofit来使用REST Web服务-为什么出现“无法连接到服务器”错误

  27. 27

    从Java客户端连接到db2

  28. 28

    为什么客户端在连接到ActiveMQ时会抛出java.io.IOException:无法识别传输方案:[failovertcp]错误?

  29. 29

    Pentaho-使用瘦客户端连接到Carte

热门标签

归档