2017-04-03 171 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