我们正在使用通过openshift维护的JBOSS EAP 6.3。我们希望与支持SSL的Websphere MQ连接。
我已成功通过JBOSS连接到非ssl MQ。但是在尝试连接ssl MQ时,我遇到了以下错误,
块引用 引起:javax.net.ssl.SSLHandshakeException:没有合适的协议(协议被禁用或密码套件不合适) 在sun.security.ssl.Handshaker.activate(Handshaker.java:470)[jsse.jar:1.7.0_79] at sun.security.ssl.SSLSocketImpl.kickstartHandshake(SSLSocketImpl.java:1438)[jsse.jar:1.7.0_79] at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1308)[jsse.jar:1.7.0_79] at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1359)[jsse.jar:1.7.0_79] at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1343)[jsse.jar:1.7.0_79] 在com.ibm.mq.jmqi.remote.impl.RemoteTCPConnection $ 6.run(RemoteTCPConnection.java:1314) 在com.ibm.mq.jmqi.remote.impl.RemoteTCPConnection $ 6.run(RemoteTCPConnection.java:1309) at java.security.AccessController.doPrivileged(Native Method)[rt.jar:1.7.0_79] at com.ibm.mq.jmqi.remote.impl.RemoteTCPConnection.protocolConnect(RemoteTCPConnection.java:1307) ......还有26个
我在standalone.xml和jboss-ejb3.xml
中创建了必需的条目standalone.xml
<system-properties>
<property name="javax.net.ssl.keyStore" value="${env.OPENSHIFT_REPO_DIR}/.openshift/config/mq.jks"/>
<property name="javax.net.ssl.keyStorePassword" value="password"/>
<property name="javax.net.ssl.trustStore" value="${env.OPENSHIFT_REPO_DIR}/.openshift/config/mq.jks"/>
<property name="javax.net.ssl.trustStorePassword" value="password"/>
<property name="sslCipherSuite" value="SSL_RSA_WITH_3DES_EDE_CBC_SHA"/>
<property name="org.apache.coyote.http11.Http11Protocol.COMPRESSION" value="on"/>
</system-properties>
<resource-adapter id='wmq.jmsra.rar'>
<archive>
wmq.jmsra.rar
</archive>
<transaction-support>NoTransaction</transaction-support>
<connection-definitions>
<connection-definition jndi-name='java:jboss/${env.OPENSHIFT_MQ_CLIENT_CONNECTIONFACTORY_NAME}' class-name='com.ibm.mq.connector.outbound.ManagedConnectionFactoryImpl' pool-name='wmq.jmsra.rar_CD'>
<config-property name='port'>
${env.OPENSHIFT_MQ_CLIENT_PORT}
</config-property>
<config-property name='hostName'>
${env.OPENSHIFT_MQ_CLIENT_HOST_NAME}
</config-property>
<config-property name='channel'>
${env.OPENSHIFT_MQ_CLIENT_CHANNEL}
</config-property>
<config-property name='transportType'>
${env.OPENSHIFT_MQ_CLIENT_TRANSPORT_TYPE}
</config-property>
<config-property name='queueManager'>
${env.OPENSHIFT_MQ_CLIENT_QUEUE_MANAGER}
</config-property>
<config-property name='sslCipherSuite'>
SSL_RSA_WITH_3DES_EDE_CBC_SHA
</config-property>
</connection-definition>
</connection-definitions>
<admin-objects>
<admin-object jndi-name='java:jboss/${env.OPENSHIFT_MQ_CLIENT_QUEUE_NAME1}' class-name='com.ibm.mq.connector.outbound.MQQueueProxy' pool-name='BNE_DEV_IN'>
<config-property name='baseQueueName'>
${env.OPENSHIFT_MQ_CLIENT_QUEUE_NAME1}
</config-property>
</admin-object>
</admin-objects>
</resource-adapter>
的JBoss-ejb3.xml
<activation-config>
<activation-config-property>
<activation-config-property-name>destination</activation-config-property-name>
<activation-config-property-value>QueueName</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>hostName</activation-config-property-name>
<activation-config-property-value>hostName</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>queueManager</activation-config-property-name>
<activation-config-property-value>qmanagerName</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>channel</activation-config-property-name>
<activation-config-property-value>channelName</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>transportType</activation-config-property-name>
<activation-config-property-value>CLIENT</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>destinationType</activation-config-property-name>
<activation-config-property-value>javax.jms.Queue</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>useJNDI</activation-config-property-name>
<activation-config-property-value>false</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>port</activation-config-property-name>
<activation-config-property-value>portNumber</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>sslCipherSuite</activation-config-property-name>
<activation-config-property-value>SSL_RSA_WITH_3DES_EDE_CBC_SHA</activation-config-property-value>
</activation-config-property>
有人可以帮我找到遗失的东西吗?
答案 0 :(得分:0)
错误消息清楚地表明您正在使用队列管理器不支持的sslCipherSuite。 找出在您要连接的队列管理器的通道上设置的SSL密码规范,并设置兼容的sslCipherSuite而不是您现在使用的sslCipherSuite(SSL_RSA_WITH_3DES_EDE_CBC_SHA)。
答案 1 :(得分:0)
了解问题的哪个版本的MQ通常会有所帮助。由于所讨论的密码几乎得到普遍支持,因此QMgr可能是现代年份,其中该密码已被弃用。这是所有版本的MQ v8.x和7.x版本以及更新的GSKits和FixPac。
请参阅知识中心的Deprecated CipherSpecs,了解哪些密码不再被认为是安全的,以及如何配置MQ以便使用它们,如果您是一名肾上腺素瘾君子,并希望生活在最前沿。当然,假设这确实是生成您正在报告的消息的问题。
答案 2 :(得分:0)
虽然这不是一个完整的答案,但我希望它会有所帮助。
直到最近,除了使用IBM JRE之外,MQ不支持高级密码。非IBM JRE不允许选择AES和其他基于TLS的密码。这在IBM v8和一些早期版本中通过发布PTF得到了解决。见http://www-01.ibm.com/support/docview.wss?uid=swg1IV66840
请务必注意,要使用此功能,必须将Java System Property com.ibm.mq.cfg.useIBMCipherMappings设置为false。
由于您使用的是JBOSS,我希望您没有使用IBM JRE,因此您需要设置此Java系统属性。