WMQ 8的Java连接

WMQ 8的Java连接,java,ibm-mq,Java,Ibm Mq,我正在尝试将现有的Java应用程序连接到WebSphereMQ8。这在过去的Java和WMQ的其他版本中是有效的,但是在Java8和WMQ8中,这不起作用。 我得到: handling exception: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate) SEND TLSv1.2 ALERT: fatal,

我正在尝试将现有的Java应用程序连接到WebSphereMQ8。这在过去的Java和WMQ的其他版本中是有效的,但是在Java8和WMQ8中,这不起作用。 我得到:

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_信任库和密钥库。有一个SSL加密套件

我尝试过(几乎)WMQ支持的所有文档化密码套件;我正在浏览整个列表,设置和环境如下:

  • JAVA SSL\u CIPHERSUITE=SSL\u RSA\u带AES\u 256\u CBC\u SHA
  • WMQ通道SSL\U密码套件=TLS\U RSA\U带AES\U 256\U CBC\U SHA
  • MQ客户机7.0.0.1——我已尝试切换到MQ客户机8,但没有任何改进
  • IBM WebSphere MQ,版本:8.0.0.5
  • AMQERR01.log中没有与客户端错误对应的内容
  • Oracle Java 8(Java(TM)SE运行时环境(build 1.8.0_60-b27))--启用SSLv3(更改为jdk.tls.disabledAlgorithms=RC4,DH keySize<768)
  • 其他信息:

    • 客户(银行)正在使用MQ 7,因此我没有选择的余地 他们使用哪种质量管理的问题。但我一直在使用MQ8进行本地测试,以检查这是否是问题的一部分
    • 我已经尝试过:-Dcom.ibm.mq.cfg.useIBMCipherMappings=false
    • 使用来自Oracle的JCE Unlimited Strength辖区策略文件
    您是否阅读了本页:


    您使用的是不推荐使用的密码套件吗?

    MQ v7.0于2008年6月27日发布(修订包7.0.0.1于2009年1月20日发布),自2015年9月30日起停止支持(超过1.5年)。根据我下面的回答,此版本的MQ将不支持Oracle JRE上的TLS密码套件,而您可以更新到更高版本的补丁包。我强烈建议您使用受支持的MQ客户端版本。较新的MQ客户端版本可以连接到较旧的MQ队列管理器。您可以通过以下链接下载MQ 8.0或MQ 9.0 jar文件的纯java安装:


    APAR增加了新功能,允许非IBM Java运行时环境的用户使用TLS密码套件

    对于v7.0,这包括在FixPack 7.0.1.13中(请注意,FixPack 7.0.1.14是此版本的最终版本)

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

    注意:此APAR是客户端修复程序

    要启用此选项,您需要执行以下操作:

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

    com.ibm.mq.cfg.useIBMCipherMappings

    必须设置为以下值:

    false

    例如,可以使用JVM参数进行配置:

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

    然后需要将密码套件指定为
    TLS\u RSA\u WITH_AES\u 256\u CBC\u SHA
    对于Oracle JRE,请注意
    SSL\u RSA\u WITH_AES\u 256\u CBC\u SHA
    是IBM JRE密码套件的名称


    通过上述步骤后,您可能会遇到AMQ9771、2393 SSL初始化错误

    dW回答“发布”。它指出:

    在这种情况下,问题是由于尝试使用AES 256 strong造成的 密码算法

    大多数Java JRE(包括Oracle/Sun和IBM)对 已启用加密算法。这限制了最大密钥大小 还有一些算法

    尝试使用AES 256密码时,例如 ECDHE_RSA_AES_256_CBC_SHA384或TLS_RSA_WITH_AES_256_CBC_SHA256 WITH a mqjava/JMS应用程序,您需要确保您的JRE支持这一点 密码。在大多数情况下,当需要更强的密码算法时, 如AES 256密码,JCE无限强度管辖 必须在JDK/JRE中获取并安装策略文件

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

    上面指向oracle站点的链接说明:

    如果需要更强的算法(例如,256位AES 钥匙),必须是 获得并安装在JDK/JRE中

    用户有责任验证此操作是否正确 当地法规允许


    如果您确实获得了2393,请按照上述建议获取并安装JCE Unlimited Strength Judiction Policy Files

    ,请使用以下详细信息更新您的问题:1。您在Java端使用的是哪种SSL_密码套件,2。SVRCONN通道上的SSLCIPH,3。特定MQ客户端版本(例如:8.0.0.6),4。特定MQ服务器版本,5。MQ队列管理器AMQERR01.LOG中与客户端错误6对应的任何错误。如果您使用的是IBM JRE或Oracle JRE。MQ的最新版本已经弃用了SSLv3和一些TLS密码规范,我怀疑这就是正在发生的事情,一旦您更新了所需的详细信息,我就可以回答您的问题。是的,我已经阅读了此页面和许多其他页面。不,它不是不推荐使用的密码套件。不同的JVM,那么您是否安装了JCE Unlimited Strength辖区策略文件?没有它,您无法进行128位以上的加密/解密。是的,客户(银行)正在使用MQ 7,因此我无法选择他们使用哪种QM。我尝试过:-Dcom.ibm.mq.cfg.useIBMCipherMappings=false和来自Oracle的JCE无限强度权限策略文件。所有的建议都很好,但还不是一个解决方案。@jedison我说过“较新的MQ客户机版本可以连接到较旧的MQ队列管理器。”所以您可以使用较新的客户机版本,您使用的MQ客户机jar文件的具体版本是什么?他们是否支持新的UseIBMIPherMappings设置?使用该设置与不使用该设置时会出现什么错误?目前,我正在使用MQ Client 7.0.0.1。我的理解是,如果useIBMCipherMappings设置有效,并且没有di