2017-04-03 172 views
1

我试图获得一个连接到WebSphere MQ 8的现有Java应用程序。过去与其他版本的Java和WMQ一起工作,但对于Java 8和WMQ8,这不希望工作。 我越来越:与WMQ 8的Java连接

handling exception: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate) 
SEND TLSv1.2 ALERT: fatal, description = handshake_failure 
WRITE: TLSv1.2 Alert, length = 2 
called closeSocket() 
Exception in thread "main" com.ibm.mq.MQException: MQJE001: Completion Code '2', Reason '2397'. 

我只是不明白这是为什么发生。我已经设置了各种javax.net.ssl参数。我使用我创建的适当的SSL_TRUSTSTORE & KEYSTORE。有一个SSL_CIPHERSUITE。 (几乎)WMQ支持的所有记录的CipherSuites;我在整个列表我的工作,与设置和环境是这样的:

  1. JAVA SSL_CIPHERSUITE = SSL_RSA_WITH_AES_256_CBC_SHA
  2. WMQ通道SSL_CIPHERSUITE = TLS_RSA_WITH_AES_256_CBC_SHA
  3. MQ客户端7.0.0.1 - 我曾尝试切换到MQ客户端8,没有改善
  4. IBM的WebSphere MQ,版本:8.0.0.5
  5. 没有在AMQERR01.LOG对应于客户端错误
  6. 甲骨文的Java 8(Java(TM)SE茹n时间环境(建立1.8.0_60-B27)) - 与启用的SSLv3(改变jdk.tls.disabledAlgorithms = RC4,DH密钥大小< 768)

附加信息:

  • 客户(银行)正在使用MQ 7,所以我没有在他们使用的QM的 问题上做出选择。但是我一直在使用MQ 8进行本地测试,以检查这是否是问题的一部分。
  • 我试过了:-Dcom.ibm.mq.cfg.useIBMCipherMappings = false
  • 从Oracle使用JCE Unlimited强制管辖权限策略文件。
+0

请用以下详细信息更新您的问题:1.您在Java端使用哪种SSL_CIPHERSUITE,2. SVRCONN通道上的SSLCIPH,3.特定MQ客户端版本(例如:8.0.0.6),4.特定MQ服务器版本,5.对应于客户端错误的MQ队列管理器AMQERR01.LOG中的任何错误,以及6.是否使用IBM JRE或Oracle JRE。 MQ的最新版本已弃用SSLv3和一些TLS密码规格,我怀疑这是发生了什么,一旦您更新了所需的详细信息,我就可以回答您的问题。 – JoshMc

回答

1

MQ v7.0于2008年6月27日发布(Fix Pack 7.0.0.1与2009年1月20日相关),自2015年9月30日(超过1年半)以来一直不受支持。根据我的回答,低于此版本的MQ将不支持Oracle JRE上的TLS CipherSuites,而您可以更新到更高版本的修订包。我强烈建议您转移到支持的MQ客户端版本。较新的MQ客户端版本可以连接到较早的MQ队列管理器。你可以下载一个java只有在以下链接9.0 jar文件MQ 8.0或MQ的安装:


APAR IV66840增加了新的功能,允许非用户-IBM Java运行时环境,以利用TLS CipherSuite。

对于v7.0,它包含在Fix Pack 7.0.1.13中(请注意Fix Pack 7.0.1。14是该版本的最终版本)。

对于8.0,这包含在Fix Pack 8.0.0.2中。

NOTE:此APAR是客户端修补程序。

要启用这个选项,你需要做到以下几点:

要启用非IBM运行时 环境下,这些非默认的映射,以下Java系统属性:

com.ibm.mq.cfg.useIBMCipherMappings

必须设置值:

false

例如,这可以通过使用JVM参数配置:

-Dcom.ibm.mq.cfg.useIBMCipherMappings=false

然后,您就需要指定的密文作为TLS_RSA_WITH_AES_256_CBC_SHA了甲骨文的JRE,注意SSL_RSA_WITH_AES_256_CBC_SHA是IBM JRE的密文名称。


经过上述过程之后,您可能会遇到AMQ9771,2393 SSL初始化错误。

dW回答发布“Why do I get AMQ9771, 2393 SSL Initialization error from a MQ Java/JMS application when trying to use an TLS AES 256 cipher?”。它指出以下几点:

在这种情况下,该问题是由试图使用AES 256强 密码算法造成的。

大多数Java JRE,包括Oracle/Sun和IBM在 上都具有导入限制启用了加密算法。这限制了最大密钥大小 以及一些算法。

当尝试使用AES 256加密,如 ECDHE_RSA_AES_256_CBC_SHA384或TLS_RSA_WITH_AES_256_CBC_SHA256与 MQ的Java/JMS应用程序,你需要确保你的JRE支持此 密码。在大多数情况下,当需要更强大的密码算法时,例如AES 256密码,JCE无限强度辖区 策略文件必须获取并安装在JDK/JRE中。

此的JDK/JRE文档中应注意:对于Oracle 1.7:

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

以上到oracle站点链接指出:

如果需要更强的算法(例如AES用256位 键),JCE Unlimited Strength Jurisdiction Policy Files必须是 获得并安装在JDK/JRE中。

用户有责任根据当地法规确认此行为是否允许为 。

如果你得到了2393按照上面的提醒,以获取并安装JCE无限制强度仲裁策略文件

+0

是的,客户(银行)正在使用MQ 7,因此我无法选择他们正在使用的QM。 我试过了: -Dcom.ibm.mq.cfg.useIBMCipherMappings = false 以及来自Oracle的JCE Unlimited Strength Jurisdiction策略文件。 所有精彩的建议,但尚未解决。 – jedison

+0

@jedison我声明“较新的MQ客户端版本可以连接到较早的MQ队列管理器。”因此您可以使用较新的客户端版本,您使用的是哪种特定版本的MQ客户端jar文件?他们是否支持新的使用IBMCipherMappings设置?使用该设置时会出现什么错误而不是使用该设置? – JoshMc

+0

目前,我正在使用MQ Client 7.0.0.1。我的理解是否使用了IBMCipherMappings设置,并且错误没有区别。 – jedison

0
+0

是的,我已阅读此页面以及许多其他许多内容。不,它不是已弃用的CipherSuite。 – jedison

+0

不同的JVM,你是否安装了JCE Unlimited Strength Jurisdiction Policy Files? http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html没有它,你无法进行超过128位的加密/解密。 – Roger

+1

谢谢,是的,也试过了。 – jedison