com.ibm.msg.client.jms.DetailedJMSException:JMSWMQ0018:无法使用连接模式“yyy”和主机名“zzz”连接到队列管理器“xxx”
Posted
技术标签:
【中文标题】com.ibm.msg.client.jms.DetailedJMSException:JMSWMQ0018:无法使用连接模式“yyy”和主机名“zzz”连接到队列管理器“xxx”【英文标题】:com.ibm.msg.client.jms.DetailedJMSException: JMSWMQ0018: Failed to connect to queue manager 'xxx' with connection mode 'yyy' and host name 'zzz' 【发布时间】:2017-08-21 20:32:56 【问题描述】:JMS 应用程序需要七个参数才能与此处给出的 MQ 系列成功建立 SSL 连接, https://github.com/ibm-messaging/mq-tls-ssl-wizard/blob/master/com.ibm.mq.ssl-wizard/src/tlswizard/samples/SSLSampleJMS.java
我正在尝试解释这些参数,
Conname - 服务器队列管理器的连接名称,格式与 MQSC DEFINE CHANNEL 命令上的 CONNAME 参数相同,但未指定端口。
我猜这是主机名Port - 服务器队列管理器的连接端口。
这是端口号SvrconnChannelName - 示例程序将尝试连接的服务器队列管理器上的服务器连接通道的名称。
QMgrName - 服务器队列管理器的名称。
SSLCiph - SSL 密码规范。
我正在使用 SSL_RSA_WITH_AES_256_CBC_SHA。SSLKeyr - 单个存储的名称,既是密钥库又是信任库。 我使用 mycertfile.cert 使用 mypassword 和以下命令生成了 myjksfile.jks,并在程序中提供了该文件的路径为“C:\Users\abc\myjksfile.jks”,
keytool -import -trustcacerts -keystore myjksfile.jks -storepass changeit -noprompt -alias ibmWebSphereMQUTQX -file C:\mqlib\mycertfile.certSSLKeyrPassword - SSL 密钥库密码 我用来生成 myjksfile.jks 文件的密码
使用这七个参数运行上述程序会导致此异常,
com.ibm.msg.client.jms.DetailedJMSException: JMSWMQ0018: Failed to connect to
queue manager 'XXXX' with connection mode 'Client' and host name
'xxxx.yyyyyy.com(XXXXX)'.Check the queue manager is started and if running in
client mode, check there is a listener running. Please see the linked
exception for more information. at
com.ibm.msg.client.wmq.common.internal.Reason.reasonToException
(Reason.java:580) at
com.ibm.msg.client.wmq.common.internal.Reason.createException
(Reason.java:216) at com.ibm.msg.client.wmq.internal.WMQConnection.<init>
(WMQConnection.java:431) at
com.ibm.msg.client.wmq.factories.WMQConnectionFactory.
createV7ProviderConnection(WMQConnectionFactory.java:6789) at
com.ibm.msg.client.wmq.factories.WMQConnectionFactory.
createProviderConnection(WMQConnectionFactory.java:6157)
at com.ibm.msg.client.jms.admin.JmsConnectionFactoryImpl.
createConnection(JmsConnectionFactoryImpl.java:285)
at com.ibm.mq.jms.MQConnectionFactory.createCommonConnection
(MQConnectionFactory.java:6126) at
com.ibm.mq.jms.MQQueueConnectionFactory.createQueueConnection
(MQQueueConnectionFactory.java:115) at
SSLSampleJMS.runSample(SSLSampleJMS.java:176)
at SSLSampleJMS.main(SSLSampleJMS.java:135)
Caused by: com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ call failed with
compcode '2' ('MQCC_FAILED') reason '2393' ('MQRC_SSL_INITIALIZATION_ERROR').
at com.ibm.msg.client.wmq.common.internal.Reason.createException
(Reason.java:204)... 8 more
Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2393;AMQ9204: Connection to
host 'xxxx.yyyyyy.com(XXXXX)' rejected.
[1=com.ibm.mq.jmqi.JmqiException[CC=2;RC=2393;AMQ9771: SSL handshake failed.
[1=java.lang.IllegalArgumentException[Cannot support
SSL_RSA_WITH_AES_256_CBC_SHA with currently installed
providers],3=xxxx.yyyyyy.com/XX.XXX.XXX.XXX:XXXXX (xxxx.yyyyyy.com),4=SSLSocket.createSocket,5=default]],3=xxxx.yyyyyy.com(XXXXX),5=RemoteTCPConnection.makeSocketSecure]
at com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect(RemoteFAP.java:2098)
at com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect(RemoteFAP.java:1347)
at com.ibm.msg.client.wmq.internal.WMQConnection.<init>(WMQConnection.java:350)
... 7 more
Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2393;AMQ9771: SSL handshake
failed. [1=java.lang.IllegalArgumentException[Cannot support
SSL_RSA_WITH_AES_256_CBC_SHA with currently installed
providers],3=xxxx.yyyyyy.com/XX.XXX.XXX.XXX:XXXXX
(xxxx.yyyyyy.com),4=SSLSocket.createSocket,5=default]
at com.ibm.mq.jmqi.remote.impl.RemoteTCPConnection.makeSocketSecure
(RemoteTCPConnection.java:2001) at com.ibm.mq.jmqi.remote.impl.
RemoteTCPConnection.connnectUsingLocalAddress(RemoteTCPConnection.java:855)
at com.ibm.mq.jmqi.remote.impl.RemoteTCPConnection.protocolConnect
(RemoteTCPConnection.java:1262) at
com.ibm.mq.jmqi.remote.impl.RemoteConnection.connect
(RemoteConnection.java:714) at
com.ibm.mq.jmqi.remote.impl.RemoteConnectionSpecification.
getSessionFromNewConnection(RemoteConnectionSpecification.java:356)
at com.ibm.mq.jmqi.remote.impl.RemoteConnectionSpecification.
getSession(RemoteConnectionSpecification.java:265)
at com.ibm.mq.jmqi.remote.impl.RemoteConnectionPool.
getSession(RemoteConnectionPool.java:144)
at com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect(RemoteFAP.java:1709)
... 9 more
Caused by: java.lang.IllegalArgumentException: Cannot support
SSL_RSA_WITH_AES_256_CBC_SHA with currently installed providers
at com.ibm.jsse2.o.<init>(o.java:29)
at com.ibm.jsse2.as.setEnabledCipherSuites(as.java:5)
at com.ibm.mq.jmqi.remote.impl.RemoteTCPConnection.makeSocketSecure
(RemoteTCPConnection.java:1994)
... 16 more
Process finished with exit code 0
【问题讨论】:
在从 SSLSampleJMS.java 得到错误的同时,在 AMQERR01.LOG 中的队列管理器上看到了什么错误? 您使用的是什么版本的 MQ 客户端和 java?尝试阅读此讨论:developer.ibm.com/answers/questions/178651/… 特别尝试将以下内容添加为命令行参数:-Dcom.ibm.mq.cfg.useIBMCipherMappings=false @JoshMc 错误日志中没有显示任何内容同时我从 SSLSampleJMS.java 收到错误。看起来这发生在与队列管理器和错误日志没有任何信息之前的任何通信。参考:developer.ibm.com/answers/questions/291714/… @AdamSmith 我正在使用 java 8 和 MQ 7.0。将 -Dcom.ibm.mq.cfg.useIBMCipherMappings=false 添加到 VM 后。我收到 com.ibm.msg.client.jms.DetailedJMSException: JMSWMQ0018: 无法使用连接模式“客户端”和主机名“空”连接到队列管理器“XXXX”。检查队列管理器是否已启动,如果在客户端模式下运行,请检查是否有正在运行的侦听器。请参阅链接的异常以获取更多信息。在 com.ibm.msg.client.wmq.common.internal.Reason.reasonToException(Reason.java:580) ... 这和你上次的错误不同吧?现在看来您需要在某处设置主机名? 【参考方案1】:上述异常是在 JMS clint 端使用错误密码套件的原因。我在客户端使用 SSL_RSA_WITH_AES_256_CBC_SHA 密码套件并得到“java.lang.IllegalArgumentException [无法支持 当前安装的 SSL_RSA_WITH_AES_256_CBC_SHA 提供商。”在 JMS 客户端使用正确的密码套件 (TLS_RSA_WITH_AES_256_CBC_SHA) 使 JMS 客户端和 MQ 系列之间的握手成功。 参考:http://www-01.ibm.com/support/docview.wss?uid=swg1IV66840
【讨论】:
以上是关于com.ibm.msg.client.jms.DetailedJMSException:JMSWMQ0018:无法使用连接模式“yyy”和主机名“zzz”连接到队列管理器“xxx”的主要内容,如果未能解决你的问题,请参考以下文章