【发布时间】:2021-10-27 12:32:42
【问题描述】:
我正在尝试使用 Java 客户端连接到使用 1 路 SSL 的 MQ 队列管理器。即使按照各种博客中提到的所有步骤,我仍然收到 MQJE001: Completion Code '2', Reason '2400' 错误。
【问题讨论】:
标签: java jmeter ssl-certificate ibm-mq loadrunner
我正在尝试使用 Java 客户端连接到使用 1 路 SSL 的 MQ 队列管理器。即使按照各种博客中提到的所有步骤,我仍然收到 MQJE001: Completion Code '2', Reason '2400' 错误。
【问题讨论】:
标签: java jmeter ssl-certificate ibm-mq loadrunner
在不了解步骤操作的情况下复制和粘贴步骤并不是最好的方法。在此处粘贴代码作为图像也是如此。
根据2400 (0960) (RC2400)错误描述:
请求了与队列管理器的连接,并指定了 SSL 加密。但是,JSSE 报告它不支持应用程序指定的 CipherSuite。
检查应用程序指定的 CipherSuite。请注意,JSSE CipherSuite 的名称与队列管理器使用的等效 CipherSpec 不同。
另外,检查 JSSE 是否正确安装。
因此,您正在尝试使用 MQ 可能支持但您的本地 Java 安装不支持的密码套件。您可以尝试使用 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 或从您的 MQ 机器获取 JDK,该机器应该安装了这个 ECDHE_RSA_AES_256_CBC_SHA384 密码套件。
更多信息:
【讨论】:
IBM MQ 错误 2400 表示 UNSUPPORTED_CIPHER_SUITE。
根据 JDK 供应商 (IBM/Oracle),您可以使用 Java 系统属性 com.ibm.mq.cfg.useIBMCipherMappings 启用 CipherSuite mapping。根据您要使用的屏幕截图ECDHE_RSA_AES_256_CBC_SHA384。如果您使用 Oracle JDK,则必须在 Java 中执行此操作:
System.setProperty("com.ibm.mq.cfg.useIBMCipherMappings", "false");
...
MQEnvironment.sslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384";
如果您使用的是 MQ 9.2,您还可以简单地配置密码套件*TLS12ORHIGHER。
【讨论】:
*TLS12ORHIGHER,队列管理器 SVRCONN 通道必须设置为 ANY_TLS12_OR_HIGHER。
您指定的是队列管理器 CipherSpec,下面是来自CipherSuite mappingIBM Docs 页面的表格,显示了根据 Java 提供程序使用哪个 CipherSuite。
| CipherSpec Equivalent | CipherSuite (IBM JRE) Equivalent | CipherSuite (Oracle JRE) |
|---|---|---|
| ECDHE_RSA_AES_256_CBC_SHA384 | SSL_ECDHE_RSA_WITH_AES_256_CBC_SHA384 | TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 |
如果您不使用 IBM JRE,那么您必须指定 java 系统属性:
com.ibm.mq.cfg.useIBMCipherMappings=false
【讨论】: