发生 MQException:完成代码 2,原因 2400 MQJE011:套接字连接尝试被拒绝

use*_*204 4 java ssl ibm-mq

我编写了一个程序来将消息放入 MQ 。当我没有 SSL 配置时它工作正常。如果我在 QueueManager 和 Channel 中配置 SSL,总是得到 An MQException发生:完成代码 2,原因 2400 MQJE011:套接字连接尝试被拒绝。尝试使用不同的密码套件 请告知如何解决。

SSL 属性:

com.ibm.mq.MQEnvironment.sslCipherSuite = "TLS_RSA_WITH_AES_256_GCM_SHA384"; 
System.setProperty("javax.net.ssl.trustStore", "D:/keystore/testKS.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "12345678");
System.setProperty("javax.net.ssl.keyStore", "D:/keystore/testKS.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "12345678");
Run Code Online (Sandbox Code Playgroud)

vaq*_*han 6

此答案特定于 Java 代码。

Java JRE,包括 Oracle/Sun 和 IBM 启用了对加密算法的导入限制。这限制了最大密钥大小和一些算法。

尝试使用 AES 256 密码时,例如ECDHE_RSA_AES_256_CBC_SHA384TLS_RSA_WITH_AES_256_CBC_SHA256,您需要确保 JRE 支持此密码。在大多数情况下,当需要更强的密码算法(例如 AES 256 密码)时,必须获取 JCE Unlimited Strength Jurisdiction Policy Files 并将其安装在 JDK/JRE 中。

JDK/JRE 文档中提到了这一点:对于 Oracle 1.7:

http://docs.oracle.com/javase/7/docs/technotes/guides/security/SunProviders.html

对于 IBM JRE:** 使用 AES_256 的密码套件需要安装 JCE Unlimited Strength Jurisdiction Policy Files。

http://www-01.ibm.com/support/knowledgecenter/SSYKE2_7.0.0/com.ibm.java.security.component.71.doc/security-component/jsse2Docs/ciphersuites.html?lang=en

这类似于 IBM MQ Explorer 中记录的问题:

https://developer.ibm.com/answers/questions/187285/why-is-a-mqrc-ssl-initialization-error-displayed-w.html

请使用 MSPKI 和密码值“TLS_RSA_WITH_AES_256_CBC_SHA”更新此 JAR 文件运行

将支持所有算法的新策略 jar,您需要将 jar 更新到您的C:\java-8\jdk1_8_0\jre\lib\security

http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html