带有MQ8的JDk8密码套件的TLSv2?

时间:2017-02-12 18:15:44

标签: ssl java-8 ibm-mq

我想知道TLSv2与JDk8密码套件和规格与MQ8?
我使用' runmqckm'在MQ8上创建了一个jks文件。 unix上的命令
jks是否依赖于Ciphersuites和Spec on parameter' -sig_alg'

https://www.ibm.com/support/knowledgecenter/SSFKSJ_8.0.0/com.ibm.mq.ref.adm.doc/q083860_.htm

Question on TLSv2 Ciphersuite

SUite<> SPec组合无法在以下网站工作 https://www.ibm.com/support/knowledgecenter/en/SSFKSJ_8.0.0/com.ibm.mq.dev.doc/q113220_.htm
CipherSpec - TLS_RSA_WITH_AES_128_CBC_SHA256
等效CipherSuite - SSL_RSA_WITH_AES_128_CBC_SHA256
协议 - TLSv1.2
FIPS 140-2兼容 - 是的

工作
MQEnvironment.sslCipherSuite =" TLS_RSA_WITH_AES_128_CBC_SHA256"
ALTER CHANNEL(TEST.CH)CHLTYPE(SVRCONN)SSLCIPH(TLS_RSA_WITH_AES_128_CBC_SHA256)

不工作
MQEnvironment.sslCipherSuite =" SSL_RSA_WITH_AES_128_CBC_SHA256&#34 ;;
ALTER CHANNEL(TEST.CH)CHLTYPE(SVRCONN)SSLCIPH(TLS_RSA_WITH_AES_128_CBC_SHA256)

Only 3 TLS Ciphers i can Test as below , what spec i can use?

Oracle CipherSuite
1.TLS_RSA_WITH_NULL_SHA256
2.TLS_RSA_WITH_AES_128_CBC_SHA256
3.TLS_RSA_WITH_AES_256_CBC_SHA256

MQ Spec
1。??
2.TLS_RSA_WITH_AES_128_CBC_SHA256
3。??

Only 1 cipher  i can use part of TLS (JDK8 + MQ8)?

工作
TLS_RSA_WITH_AES_128_CBC_SHA256 - > TLS_RSA_WITH_AES_128_CBC_SHA256

不工作

  

TLS_RSA_WITH_NULL_SHA256 - > TLS_RSA_WITH_NULL_SHA256

ALTER CHANNEL(TEST.CH) CHLTYPE(SVRCONN) SSLCIPH(TLS_RSA_WITH_NULL_SHA256)
     1 : ALTER CHANNEL(TEST.CH) CHLTYPE(SVRCONN) SSLCIPH(TLS_RSA_WITH_NULL_SHA256)
AMQ8242: SSLCIPH definition wrong.

无效

  

TLS_RSA_WITH_AES_256_CBC_SHA256 - > TLS_RSA_WITH_AES_256_CBC_SHA256

MQJE001: Completion Code '2', Reason '2393'.
com.ibm.mq.MQException: MQJE001: Completion Code '2', Reason '2393'.
        at com.ibm.mq.MQManagedConnectionJ11.<init>(MQManagedConnectionJ11.java:249)
        at com.ibm.mq.MQClientManagedConnectionFactoryJ11._createManagedConnection(MQClientManagedConnectionFactoryJ11.java:450)
        at com.ibm.mq.MQClientManagedConnectionFactoryJ11.createManagedConnection(MQClientManagedConnectionFactoryJ11.java:487)
        at com.ibm.mq.StoredManagedConnection.<init>(StoredManagedConnection.java:97)
        at com.ibm.mq.MQSimpleConnectionManager.allocateConnection(MQSimpleConnectionManager.java:194)
        at com.ibm.mq.MQQueueManagerFactory.obtainBaseMQQueueManager(MQQueueManagerFactory.java:868)
        at com.ibm.mq.MQQueueManagerFactory.procure(MQQueueManagerFactory.java:816)
        at com.ibm.mq.MQQueueManagerFactory.constructQueueManager(MQQueueManagerFactory.java:758)
        at com.ibm.mq.MQQueueManagerFactory.createQueueManager(MQQueueManagerFactory.java:200)
        at com.ibm.mq.MQQueueManager.<init>(MQQueueManager.java:682)
        at MQProducerTLS.main(MQProducerTLS.java:89)
Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2393;AMQ9204: Connection to host 'localhost(2017)' rejected. [1=com.ibm.mq.jmqi.JmqiException[CC=2;RC=2393;AMQ9771: SSL handshake failed. [1=java.lang.IllegalArgumentException[Cannot support TLS_RSA_WITH_AES_256_CBC_SHA256 with currently installed providers],3=localhost/127.0.0.1:2017 (localhost),4=SSLSocket.createSocket,5=default]],3=localhost(2017),5=RemoteTCPConnection.makeSocketSecure]
        at com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect(RemoteFAP.java:2282)
        at com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect(RemoteFAP.java:1294)
        at com.ibm.mq.ese.jmqi.InterceptedJmqiImpl.jmqiConnect(InterceptedJmqiImpl.java:376)
        at com.ibm.mq.ese.jmqi.ESEJMQI.jmqiConnect(ESEJMQI.java:560)
        at com.ibm.mq.MQSESSION.MQCONNX_j(MQSESSION.java:916)
        at com.ibm.mq.MQManagedConnectionJ11.<init>(MQManagedConnectionJ11.java:235)
        ... 10 more
Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2393;AMQ9771: SSL handshake failed. [1=java.lang.IllegalArgumentException[Cannot support TLS_RSA_WITH_AES_256_CBC_SHA256 with currently installed providers],3=localhost/127.0.0.1:2017 (localhost),4=SSLSocket.createSocket,5=default]
        at com.ibm.mq.jmqi.remote.impl.RemoteTCPConnection.makeSocketSecure(RemoteTCPConnection.java:2049)
        at com.ibm.mq.jmqi.remote.impl.RemoteTCPConnection.connnectUsingLocalAddress(RemoteTCPConnection.java:861)
        at com.ibm.mq.jmqi.remote.impl.RemoteTCPConnection.protocolConnect(RemoteTCPConnection.java:1277)
        at com.ibm.mq.jmqi.remote.impl.RemoteConnection.connect(RemoteConnection.java:863)
        at com.ibm.mq.jmqi.remote.impl.RemoteConnectionSpecification.getSessionFromNewConnection(RemoteConnectionSpecification.java:409)
        at com.ibm.mq.jmqi.remote.impl.RemoteConnectionSpecification.getSession(RemoteConnectionSpecification.java:305)
        at com.ibm.mq.jmqi.remote.impl.RemoteConnectionPool.getSession(RemoteConnectionPool.java:146)
        at com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect(RemoteFAP.java:1730)
        ... 15 more
Caused by: java.lang.IllegalArgumentException: Cannot support TLS_RSA_WITH_AES_256_CBC_SHA256 with currently installed providers
        at sun.security.ssl.CipherSuiteList.<init>(CipherSuiteList.java:81)
        at sun.security.ssl.SSLSocketImpl.setEnabledCipherSuites(SSLSocketImpl.java:2461)
        at com.ibm.mq.jmqi.remote.impl.RemoteTCPConnection.makeSocketSecure(RemoteTCPConnection.java:2041)
        ... 22 more
  

2017年2月20日更新

当示例代码,放在应用程序中获取低于授权错误  新问题链接如下

http://stackoverflow.com/questions/42347461/authorization-errors-with-mq8-jdk8

1 个答案:

答案 0 :(得分:2)

关于-sig_alg命令的runmqckm标志,以下详细信息位于您提供的链接中:

  

在创建证书期间使用的散列算法   请求,自签名证书或证书签名。   此散列算法用于创建与之关联的签名   新创建的证书或证书请求。

在岸上,-sig_alg命令的runmqckm标志与您在Java中指定的CipherSuite或您在MQ SVRCONN通道上指定的CipherSpec无关。

在我对您之前提问的回答中,mq-error-on-ssl-enabled我提供了以下信息:

APAR IV66840中的表格包含以下信息:

  

以下WebSphere MQ CipherSuite到CipherSpec映射具有   这个APAR已经为WebSphere MQ v7.1和v7.5启用了   Java的类和JMS的类支持SHA-2:￴

Oracle CipherSuite              IBM MQ CipherSpec
TLS_RSA_WITH_NULL_SHA256        TLS_RSA_WITH_NULL_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA256 TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA256 TLS_RSA_WITH_AES_256_CBC_SHA256

如果您按照我提供的APAR IV66840链接,您将找到有关MQ v8.0的相同类型的信息:

  

以下WebSphere MQ CipherSuite到CipherSpec映射   已由此APAR为WebSphere MQ v8启用:

CipherSuite                     --> CipherSpec
...
TLS_RSA_WITH_AES_128_CBC_SHA256 --> TLS_RSA_WITH_AES_128_CBC_SHA256
...
TLS_RSA_WITH_AES_256_CBC_SHA256 --> TLS_RSA_WITH_AES_256_CBC_SHA256
...
TLS_RSA_WITH_NULL_SHA256        --> TLS_RSA_WITH_NULL_SHA256
  

更新(2017/02/16)以解决更多问题

问题1: TLS_RSA_WITH_NULL_SHA256无效

答案:TLS_RSA_WITH_NULL_SHA256被认为是弱密码规范,因为它不提供数据加密,默认情况下在v8.0中被禁用。

如果你真的想使用这个弱的密码规范,你可以在启动队列管理器之前设置以下环境变量:

AMQ_SSL_WEAK_CIPHER_ENABLE=TLS_RSA_WITH_NULL_SHA256

或者将以下内容添加到qm.ini的SSL:节并启动队列管理器:

SSL:
   AllowWeakCipherSpec=TLS_RSA_WITH_NULL_SHA256

以下是有关此主题的更多详细信息。

在我对你先前问题的回答中,MQ Error on SSL enabled&#34;我提供了以下信息:

  

有一篇非常好的IBM developerWorks博客文章&#34; SSL and TLS Cipher Specification Deprecations for the MQ Product&#34;   发布于2016年5月19日由Miguel A. Rodriguez详细介绍   各种修订包中不推荐使用哪些密码。

在该链接中指出:

  

<强> V 即可。随着IBM MQ V8.0.3.3,SSL和弱TLS密码的发布   与之前一样,规范继续被弃用(禁用)   上面提到的版本,但现在弱的密码规范需要一个   新的价值。此更改适用于SSL和弱TLS密码   规格。

AMQ_SSL_WEAK_CIPHER_ENABLE=Value
or
SSL:
AllowWeakCipherSpec=Value
     

环境变量或队列管理器配置设置的可接受值如下:

     
      
  • 单个SSL或弱TLS密码规范名称。
  •   
  • 由逗号分隔的一串SSL或弱TLS密码规范名称。
  •   
  • &#34; ALL&#34;的价值启用所有SSL和所有弱TLS密码规范。
  •   
     

。 。

     

<强> VI 即可。弃用(禁用)SSL密码规范和弱TLS   密码规范。

     

注意:这些是需要环境的密码规范   之前讨论过的变量或qm.ini设置,以便使用它们   用于加密通信。

     

以下是已弃用(禁用)密码规范的列表   按协议,版本和适用的操作分类   系统。有关弃用的密码规范的详细信息可以是   可在产品文档部分&#34;弃用的CipherSpecs中找到。&#34;

     

SSL V3
  All CipherSpecs are disabled by default
  
  TLS 1.0
  Cipher Specification Operating System
  TLS_RSA_EXPORT_WITH_RC2_40_MD5 IBMi
  TLS_RSA_EXPORT_WITH_RC4_40_MD5 IBMi
  TLS_RSA_WITH_DES_CBC_SHA All Platforms
  TLS_RSA_WITH_NULL_MD5 IBMi
  TLS_RSA_WITH_NULL_SHA IBMi
  TLS_RSA_WITH_RC4_128_MD5 IBMi
  
  TLS 1.2
  Cipher Specification Operating System
  ECDHE_ECDSA_NULL_SHA256 Linux,Windows,Unix
  ECDHE_ECDSA_RC4_128_SHA256 Linux,Windows,Unix
  ECDHE_RSA_NULL_SHA256 Linux,Windows,Unix
  ECDHE_RSA_RC4_128_SHA256 Linux,Windows,Unix
  TLS_RSA_WITH_NULL_NULL Linux,Windows,Unix
  的 TLS_RSA_WITH_NULL_SHA256 All Platforms
  TLS_RSA_WITH_RC4_128_SHA256 Linux,Windows,Unix

问题2: TLS_RSA_WITH_AES_256_CBC_SHA256无效

答案:重复使用与先前问题相同的答案&#34; MQ Error on SSL enabled&#34;我提供了以下信息:

  

搜索到您收到的错误后,我发现了这个dW答案   发布&#34; Why do I get AMQ9771, 2393 SSL Initialization error from a MQ Java/JMS application when trying to use an TLS AES 256 cipher?&#34;。   它声明如下:

     
    

在这种情况下,问题是由尝试使用AES 256强引起的     密码算法。

         

大多数Java JRE,包括Oracle / Sun和IBM都有Import Enits     启用加密算法。这限制了最大密钥大小     还有一些算法。

         

尝试使用AES 256密码时,例如     ECDHE_RSA_AES_256_CBC_SHA384或 TLS_RSA_WITH_AES_256_CBC_SHA256     MQ Java / JMS应用程序,您需要确保您的JRE支持此功能     密码。在大多数情况下,当需要更强的密码算法时,     例如AES 256密码,JCE Unlimited Strength Jurisdiction     必须获取策略文件并将其安装在JDK / JRE中。

         

这在JDK / JRE文档中有说明:对于Oracle 1.7:

         

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

  
     

oracle网站上面的链接指出:

     
    

如果需要更强的算法(例如,具有256位的AES)     密钥),JCE Unlimited Strength Jurisdiction Policy Files     一定是     获得并安装在JDK / JRE中。

         

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

  
     

我建议您使用较低的CipherSuite   TLS_RSA_WITH_AES_128_CBC_SHA256,或按照上面的建议去做   获取并安装 JCE Unlimited Strength Jurisdiction Policy   文件