如何使用支持Websphere SSL的MQ配置JBOSS连接?

时间:2015-09-01 06:19:08

标签: java ssl ibm-mq jboss6.x

我们正在使用通过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>

有人可以帮我找到遗失的东西吗?

3 个答案:

答案 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系统属性。