【问题标题】:IBM MQIPT SSL Handshake issueIBM MQIPT SSL 握手问题
【发布时间】:2020-10-09 06:34:01
【问题描述】:

我们正在将 java MQ 客户端连接到客户 IBM MQ 服务器,为了连接,我们在云端有一个 MQIPT 实例,在非云端有一个 MQIPT 实例。一旦在非云场所禁用 SSL 安全性,我们就可以连接它。但是,一旦非云场所启用 SSL,我们将面临 SSL 握手问题。证书在我们之间共享。

我们无权访问该非云环境。

我们正在通过 Java 客户端连接 MQIPT。以下是我们在 mqipt 跟踪中得到的跟踪。

  1. 当我们没有在 mq java 客户端设置密码时,我们会遇到以下错误

在这种情况下,MQIPT 为所有密码启用。

Issuer: 'CN=********* TEST CA ****,OU=*****,O=******** AG,C=******'
12:45:13.799    27   1414-2s         Processing keyType: RSA
12:45:13.800    27   1414-2s         No RSA certificates in keyring
12:45:13.800    27   1414-2s         Processing keyType: DSA
12:45:13.800    27   1414-2s         No DSA certificates in keyring
12:45:13.800    27   1414-2s         Processing keyType: EC
12:45:13.800    27   1414-2s         No EC certificates in keyring
12:45:13.800    27   1414-2s         WARNING: No suitable certificate to send to the remote server
12:45:13.800    27   1414-2s         --------} IPTX509KeyManager.chooseClientAlias() rc=0
12:45:14.184    27   1414-2s         SSLHandshakeException handshaking:com.ibm.jsse2.k.a(k.java:7)
  1. 但是当我们在 java MQ 客户端中设置 CipherSuite 时,我们会在 mqipt 中得到错误日志
MQCPI014 Protocol eyecatcher (16030300) not recognized

MQIPT 版本 --> IBM MQ Internet Pass-Thru V9.2.0.1

MQIPT 配置如下

[global]
CommandPort=1884
RemoteShutDown=true
MinConnectionThreads=5
MaxConnectionThreads=100
IdleTimeout=20
ClientAccess=true
QMgrAccess=true
HTTP=true
HTTPChunking=false
Trace=5
ConnectionLog=true
MaxLogFileSize=50

[route]
Name=Route_1
Active=true
ListenerPort=1414
Destination=mq-dmz-************
DestinationPort=********
HTTP=true
HTTPS=true
SSLClient=true
SSLClientProtocols=TLSv1.2
SSLClientKeyRing="path of key ring PFX file"
SSLClientKeyRingPW="path of password file"
HTTPServer=<Http Server name>
HTTPServerPort=443
URIName=<URI name>
SSLClientCAKeyRing="same as SSLClientKeyRing"
SSLClientCAKeyRingPW="same as SSLClientKeyRingPW"
SSLClientCipherSuites=SSL_ECDHE_RSA_WITH_AES_256_GCM_SHA384

【问题讨论】:

  • MQIPT 版本 --> IBM MQ Internet Pass-Thru V9.2.0.1 [全局] CommandPort=1884 RemoteShutDown=true MinConnectionThreads=5 MaxConnectionThreads=100 IdleTimeout=20 ClientAccess=true QMgrAccess=true HTTP= true HTTPChunking=false Trace=5 ConnectionLog=true MaxLogFileSize=50
  • @JoshMc : 对不起,我的目的不是回滚你的更改,不小心是我做的
  • 完成并删除了该标签@JoshMc
  • 是的,我们正在使用 http
  • 我们没有使用代理,因为我们是客户。但在服务器端我不知道。

标签: ssl ssl-certificate ibm-mq


【解决方案1】:

接受来自 MQ 客户端的连接、解密、然后重新加密并发送到下一个跃点的设置应如下所示:

[route]
Name=Route_1
Active=true
ListenerPort=1414
Destination=mq-dmz-************
DestinationPort=********
HTTP=true
HTTPS=true
SSLClient=true
SSLClientProtocols=TLSv1.2
SSLClientKeyRing="path of key ring PFX file"
SSLClientKeyRingPW="path of password file"
HTTPServer=<Http Server name>
HTTPServerPort=443
URIName=<URI name>
SSLClientCAKeyRing="same as SSLClientKeyRing"
SSLClientCAKeyRingPW="same as SSLClientKeyRingPW"
SSLClientCipherSuites=SSL_ECDHE_RSA_WITH_AES_256_GCM_SHA384
SSLServer=true
SSLServerProtocols=TLSv1.2
SSLServerKeyRing="path of key ring PFX file"
SSLServerKeyRingPW="path of password file"
SSLServerCAKeyRing="same as SSLServerKeyRing"
SSLServerCAKeyRingPW="same as SSLServerCAKeyRing"
SSLServerCipherSuites=SSL_ECDHE_RSA_WITH_AES_256_GCM_SHA384

您缺少的是从 TLS 会话的角度配置路由,您是:

  1. TLS 服务器(您正在接收入站连接并对其进行解密)
  2. TLS 客户端(您正在连接到另一个队列管理器或 MQIPT 并进行加密)

要接受来自 MQ 客户端应用程序的 TLS 连接,您需要将 SSLServer* 等效配置为已配置的 SSLClient* 设置。

【讨论】:

  • 在一切正常后只是一个小问题,在多次成功连接后,我们在 mqipt 获得了 sockeTimeout。我们遇到了 MQRC_Connection 损坏的问题。这不是很频繁,但是在多次发送或接收消息后,我们得到了这个。
  • 当通道运行时,通道状态中报告的 HBINT 是什么?
  • question 的 cmets 中讨论了如何执行 IBM MQ java 跟踪以及如何查看协商的心跳间隔。你能试试这个来找出你的 HBINT 是什么。我猜你的断开连接是在一段时间不活动之后?
  • 目前我们每 3 秒推送一次消息,我们遇到了这个问题
  • 我们每 3 秒创建连接并推送消息,然后关闭连接。
猜你喜欢
  • 1970-01-01
  • 2014-06-28
  • 2019-04-24
  • 2017-09-01
  • 1970-01-01
  • 2019-05-05
  • 1970-01-01
  • 2012-04-04
  • 1970-01-01
相关资源
最近更新 更多