【问题标题】:JMSCMQ0001: IBM MQ call failed with compcode '2' ('MQCC_FAILED') reason '2400' ('MQRC_UNSUPPORTED_CIPHER_SUITE')JMSCMQ0001:IBM MQ 调用失败,compcode '2' ('MQCC_FAILED') 原因 '2400' ('MQRC_UNSUPPORTED_CIPHER_SUITE')
【发布时间】:2017-09-29 22:08:09
【问题描述】:

尝试从本地计算机上的 Java 客户端与远程 MQ 建立连接时遇到以下异常:

com.ibm.mq.MQException: JMSCMQ0001: IBM MQ call failed with compcode '2' ('MQCC_FAILED') reason '2400' ('MQRC_UNSUPPORTED_CIPHER_SUITE')

这适用于 Java 版本 1.7、Oralce JRE、密码套件“TLS_RSA_WITH_AES_256_CBC_SHA256”和以下 Maven 依赖项:

<dependency>
  <groupId>com.ibm.mq</groupId>
  <artifactId>allclient</artifactId>
  <version>9.0.0</version>
</dependency>
<dependency>
  <groupId>com.sun.messaging.mq</groupId>
  <artifactId>fscontext</artifactId>
  <version>4.4.2</version>
</dependency>

【问题讨论】:

    标签: ssl jms weblogic ibm-mq


    【解决方案1】:

    更新

    用更多最新信息更新之前提供的每个点。

    1. IBM MQ 9.2 及更高版本现在支持 TLS1.3。 TLS1.3 密码套件现在使用在 Oracle Java 和 IBM Java 中都匹配的标准名称,不再需要使用 -Dcom.ibm.mq.cfg.useIBMCipherMappings=false,您可以使用 TLS1.3 密码套件。

    2. 签名算法SHA224withRSA 是使用Oracle 密码套件TLS_RSA_WITH_AES_256_CBC_SHA256 所必需的。 Oracle JRE 1.7.0_171 或更高版本和 1.8.0_162 或更高版本现在默认启用无限强度策略文件并支持SHA224withRSA

    3. 上述版本或更高版本中现在包含并默认启用使用 SHA256 密码套件所需的 JCE 无限强度管辖策略文件


    影响这一点的三个因素:

    1. 如果您想使用 Oracle JRE,您需要设置 -Dcom.ibm.mq.cfg.useIBMCipherMappings=false,这将允许 IBM MQ 使用 Oracle Cipher Suite 名称,例如 TLS_RSA_WITH_AES_256_CBC_SHA256

    2. Oracle JRE 1.7 不支持签名算法 SHA224withRSA,需要使用 Oracle Cipher Suite TLS_RSA_WITH_AES_256_CBC_SHA256。基于此,您需要转到 Oracle JRE 1.8。

    3. 您需要获取并安装 JCE Unlimited Strength Jurisdiction Policy Files 才能使用 SHA256 密码套件。


    我对另一篇帖子“MQ Error on SSL enabled”的回答中更详细地介绍了上述信息。

    【讨论】:

    • 乔希感谢您的回复。我已经在 VM 参数中尝试过 -Dcom.ibm.mq.cfg.useIBMCipherMappings=false ,以便 IBM MQ 使用 Oracle Cipher Suite 。另外,在使用 UnlimitedJCEPolicyJDK8 迁移到 JDK 8 之后,我仍然面临同样的问题。
    • 你能看看你的jar文件中的manafest并确认是来自mq v9吗。
    • 实施-标题:用于 JMS 和 Java 的 IBM MQ 类实施-版本:9.0.0.0 - p900-L160512.4 实施-供应商:IBM Corporation Main-Class:com.ibm.msg.client。 commonservices.tools.MainController 类路径:jms.jar fscontext.jar providerutil.jar JSON4J.jar bcpkix-j dk15on-152.jar bcprov-jdk15on-152.jar
    • @WaqasAhmed 我注意到您用 weblogic 标记了这个问题,您是否使用JMSAdmin 创建绑定文件?如果是这样,您能否在文本编辑器中检查绑定文件以确保它引用 TLS_RSA_WITH_AES_256_CBC_SHA256 而不是 SSL_RSA_WITH_AES_256_CBC_SHA256 作为 CipherSuite?我读到需要编辑 JMSAdmin 以包含 -Dcom.ibm.mq.cfg.useIBMCipherMappings=false 设置,以便它不会自动将 CipherSuite 名称从 TLS_ 映射到 IBM Java 的 SSL_。
    • 只想提一下,设置 -Dcom.ibm.mq.cfg.useIBMCipherMappings=false 帮助我获得 SSL 加密连接与 OpenJDK-1.8 和 IBM MQ v8 一起使用。我使用的密码也是TLS_RSA_WITH_AES_256_CBC_SHA256,OpenJDK 中的 JSSE 提供程序是 SunJSSE 1.8 版。我没有对 JCE Unlimited Strength Jurisdiction Policy Files 做任何事情。感谢您的帮助!
    【解决方案2】:

    你也可以试试这个额外的参数:

    -Djavax.net.ssl.trustStorePassword=mqpassword -Djavax.net.ssl.keyStorePassword=mqpassword  -Dcom.ibm.mq.cfg.preferTLS=true -Dcom.ibm.mq.cfg.useIBMCipherMappings=false 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-10
      • 1970-01-01
      • 2018-08-30
      • 2020-04-18
      • 1970-01-01
      • 1970-01-01
      • 2014-04-01
      • 1970-01-01
      相关资源
      最近更新 更多