【问题标题】:1 way SSL with MQIPT and tomcat docker1 路 SSL 与 MQIPT 和 tomcat docker
【发布时间】:2017-09-14 08:21:58
【问题描述】:

我正在尝试连接到启用了 1 路 SSL 的 MQIPT。下面是我的spring配置

<bean id="connectionFactory"
        class="org.springframework.jms.connection.SingleConnectionFactory">
        <property name="targetConnectionFactory">
            <ref bean="mqQueueConnectionFactory" />
        </property>
    </bean>
    <bean id="mqQueueConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory">
        <property name="hostName" value="xx.xx.xx.xx" />
        <property name="port" value="xxxx" />
        <property name="queueManager" value="QM" />
        <property name="transportType" value="1" />
        <property name="channel" value="SSL.CHNL" />
        <property name="SSLCipherSuite" value="SSL_RSA_WITH_AES_256_CBC_SHA"/>
    </bean>
    <bean id="destination" class="com.ibm.mq.jms.MQQueue">
        <constructor-arg value="SANDBOX_Q" />
        <property name="baseQueueManagerName">
            <value>QM</value>
        </property>
        <property name="baseQueueName">
            <value>QUEUE</value>
        </property>
    </bean>

我将证书添加到信任库并在 tomcat 启动中设置标志 -Dcom.ibm.mq.cfg.useIBMCipherMappings=false。在 MQIPT 密码套件中设置为 SSL_RSA_WITH_AES_256_CBC_SHA。我收到以下错误

MQ Exception:: Uncategorized exception occured during JMS processing; nested exception is com.ibm.msg.client.jms.DetailedJMSException: JMSWMQ0018: Failed to connect to queue manager 'QM' with connection mode 'Client' and host name 'null'. .... Caused by: com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ call failed with compcode '2' ('MQCC_FAILED') reason '2400' ('MQRC_UNSUPPORTED_CIPHER_SUITE').

我正在使用 JDK 8 和 MQ 客户端 jar 版本 8。

【问题讨论】:

    标签: ssl ibm-mq tomcat8 spring-jms


    【解决方案1】:

    如果您使用的是 Oracle JRE,那么您需要在 IBM MQ V8 知识中心页面“SSL/TLS CipherSpecs and CipherSuites in IBM MQ classes for JMS”中为每个表指定 SSLCipherSuite

    CipherSpec                  |Equivalent CipherSuite (IBM JRE)|Equivalent CipherSuite (Oracle JRE)
    -------------------------------------------------------------------------------------------------
    TLS_RSA_WITH_AES_256_CBC_SHA|  SSL_RSA_WITH_AES_256_CBC_SHA  |TLS_RSA_WITH_AES_256_CBC_SHA
    

    根据上述情况,如果使用 IBM JRE 的 MQIPT 指定 SSL_RSA_WITH_AES_256_CBC_SHA,则意味着队列管理器上的 SVRCONN 通道应指定 TLS_RSA_WITH_AES_256_CBC_SHA,而带有 -Dcom.ibm.mq.cfg.useIBMCipherMappings=false 的 Oracle JRE 应指定 TLS_RSA_WITH_AES_256_CBC_SHA也是。

    总结,把你的Spring配置改成:

    <property name="SSLCipherSuite" value="TLS_RSA_WITH_AES_256_CBC_SHA"/>
    

    【讨论】:

    • @AnilBhaskaran 请确认您使用的是 Oracle JRE。当您收到 spring 错误时,您是否在 MQIPT 的日志中看到任何错误?您使用的是什么特定的 v8 版本? useIBMCipherMappings 设置是在 8.0.0.2 中引入的。
    • 我无权访问 MQIPT 日志。会检查的。我正在使用带有 tomcat / docker 的 open-jdk 8。所以你觉得开放 jdk 有什么挑​​战吗?
    • 我没有使用它的经验,但基于 IBM 提到的“IBM JRE”和“Oracle JRE”的文档。它可能有效,但可能未经 IBM 测试/支持。我要问的版本是您提到的“MQ 客户端 jars 版本 8”的 jar 文件,jar 文件来自哪个特定版本。在一个 Linux 上,您可以对 com.ibm.*.jar 文件unzip -p com.ibm.mq.allclient.jar META-INF/MANIFEST.MF|grep -i Implementation-Version 之一运行如下命令。
    • ibm客户端jar的版本是8.0.0.7
    • @AnilBhaskaran 谢谢,那个版本支持useIBMCipherMappings。您使用的是哪个特定版本的 OpenJDK?你能用 Oracle JRE 或 IBM JRE 试试看是否有同样的问题吗?我搜索了一下,看来 OpenJDK 8 应该支持 TLS_RSA_WITH_AES_256_CBC_SHA。
    猜你喜欢
    • 1970-01-01
    • 2019-12-03
    • 2021-03-14
    • 2011-01-22
    • 1970-01-01
    • 2020-09-26
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多