我正在研究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
不是证书的一部分。
答案 0 :(得分:0)
请注意,以下信息在MQ v8.0.0,v9.0.0和v9.1.0知识中心中有相同的记录。
IBM文档中的 IBM MQ 8.0.0知识中心页面IBM MQ>Security>Security overview>IBM MQ security mechanisms>Security protocols in IBM MQ>The SSL or TLS key repository>Digital certificate labels, understanding the requirements如下:
IBM MQ版本8.0支持在服务器上使用多个证书。 同一队列管理器,使用每通道证书标签属性。 队列管理器的入站通道(例如,服务器连接 或接收方)依靠使用TLS服务器名称检测通道名称 指示(SNI),以便从 队列管理器。
同一页上也记录了以下内容:
请注意,入站通道(包括接收器,群集接收器, 不合格的服务器和服务器连接渠道)仅发送 配置的证书(如果远程对等方的IBM MQ版本完全) 支持证书标签配置,并且该通道正在使用 TLS CipherSpec。
在所有其他情况下,队列管理器的CERTLABL参数确定 证书已发送。特别是以下内容 由队列的CERTLABL参数配置的证书 经理,而与渠道特定的标签设置无关:
- 所有当前的Java和JMS客户端。
- 8.0版之前的IBM MQ版本。
IBM还在IBM MQ 8.0.0知识中心页面IBM MQ>Reference>Configuration reference>Channel attributes>Channel attributes in alphabetical order>Certificate label (CERTLABL)中记录了类似信息:
入站通道(包括RCVR,CLUSRCVR,不合格的SERVER和 SVRCONN通道)仅在以下情况下发送配置的证书: 远程对等的IBM®MQ版本完全支持证书标签 配置,并且该通道正在使用TLS CipherSpec。如果那是 并非如此,队列管理器的CERTLABL属性确定了 证书已发送。此限制是因为证书标签 入站通道的选择机制取决于TLS协议 并非在所有情况下都支持的扩展名。 尤其是 Java™ 客户端,JMS客户端以及8.0之前的所有版本的IBM MQ 不支持所需的协议扩展,并且只会 接收由队列管理器CERTLABL配置的证书 属性,而与通道特定的标签设置无关。
正如您所说,Java 8确实支持SNI,但是显然IBM尚未在Java的IBM MQ类或JMS的IBM MQ类中实现该功能。
我可以想到的一种可能的解决方案是,您可以找出哪个基础函数MQ调用来创建TLS会话,并重写此函数以将SNI属性设置为MQ可以使用以下代码在队列管理器上识别的值:
SSLParameters params = sslSocket.getSSLParameters();
params.setServerNames(serverNames);
sslSocket.setSSLParameters(params);
IBM已在技术说明“ IBM WebSphere MQ: How does MQ provide multiple certificates (CERTLABL) capability”中记录了通道名称在SNI中传递的格式:
MQ使用的SNI地址基于以下通道名称: 被请求,后缀“ .chl.mq.ibm.com”。
MQ通道名称映射为有效的SNI名称,如下所示:
- 将大写字母A-Z折叠为小写
- 数字0到9保持不变
- 所有其他字符(包括小写字母a-z)均转换为其2位十六进制ASCII字符代码,后跟a 连字符。
- 小写字母a到z分别映射到“ 61-”到“ 7a-”
- 百分比(%)映射为“ 25-”
- 连字符(-)映射为“ 2d-”
- 点(。)映射到“ 2e-”
- 正斜杠(/)映射为“ 2f-”
- 下划线(_)映射到“ 5f-”
在EBCDIC平台上,通道名称先转换为ASCII 应用此映射。例如,频道名称“ TO.QMGR1”映射 到SNI地址“ to2e-qmgr1.chl.mq.ibm.com”。
相比之下,小写通道名称“ to.qmgr1”映射到SNI 地址“ 74-6f-2e-71-6d-67-72-1.chl.mq.ibm.com”。