亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將 JVM 參數“-Dcom.ibm.mq.cfg.useIBMCipherMappings”

如何將 JVM 參數“-Dcom.ibm.mq.cfg.useIBMCipherMappings”

瀟湘沐 2022-12-15 17:07:32
最近我已經遷移到 IBM MQ v8 到 IBM MQ v9(特別是 v9.1.2.0)。我使用 SSL 與經紀人通信。因此,根據Deprecated CipherSpecs文檔,IBM 已經棄用了 MQ 8 附帶的密碼套件數量,并且似乎我一直在使用的所有密碼套件都已被 v9 向上棄用。因此,我已經實施了新的 TLS 密碼套件來處理我在 Oracle JVM(版本 1.8.0_211)上運行的應用程序。自從我在應用程序中遇到異常以來;com.ibm.mq.MQException: MQJE001: Completion Code '2', Reason '2400'.    at com.ibm.mq.MQManagedConnectionJ11.constructMQCD(MQManagedConnectionJ11.java:1437)    at com.ibm.mq.MQManagedConnectionJ11.constructCNO(MQManagedConnectionJ11.java:1537)    at com.ibm.mq.MQManagedConnectionJ11.<init>(MQManagedConnectionJ11.java:221)    ... (Omitted the rest)當我深入了解原因時,發現這是 IBM MQ 密碼套件和 Oracle JRE 密碼套件名稱不匹配的問題。但我確實在 IBM MQ classes for JMS 文檔中引用了 TLS CipherSpecs 和 CipherSuites來映射密碼套件名稱。我在我的應用程序中使用了一些在 IBM MQ 中也可用的Equivalent CipherSuite (Oracle JRE)列值。但仍然遇到問題。在我找到這個建議將這個參數添加到 IBM MQ 的 JRE 的答案-Dcom.ibm.mq.cfg.useIBMCipherMappings=false之后(據我所知)。這可能允許 IBM MQ 使用 Oracle 兼容的密碼套件名稱。我的問題是,如何將此 JVM 參數添加-Dcom.ibm.mq.cfg.useIBMCipherMappings=false到 IBM MQ JRE?這個問題將 Java 客戶端 (JMS) 連接到 IBM MQ問題表明需要將相同的參數作為系統屬性添加到應用程序中System.setProperty("com.ibm.mq.cfg.useIBMCipherMappings", "false"),但它沒有任何不同。Java connection to WMQ 8 question 也說明了相同的解決方案,但沒有提到如何將此 JVM 參數添加到 IBM MQ。更新 1我做了一些關于如何向 IBM MQ 添加 JVM 參數的研究。但我只能找到 Websphere 應用程序服務器的解決方案。我目前在應用程序中使用的 CipherSuite 是;TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256(符合 Oracle JRE)IBM MQ 有相應的;ECDHE_ECDSA_AES_128_CBC_SHA256(符合 IBM MQ)
查看完整描述

2 回答

?
元芳怎么了

TA貢獻1798條經驗 獲得超7個贊

經過一段時間的工作,我能夠解決這個問題。從一開始我就在應用程序端遇到了這個證書配置問題。即使在創建self-signed標記為之后的證書并使用工具ibmwebspheremq<queue_manager_name>與客戶端應用程序共享提取的證書之后,也會發生這種情況。ikeymanAMQ9637E: Channel is lacking a certificate.


簡而言之,為了完全解決這個問題,我做了以下事情;


將客戶端 MQ 依賴項更新為com.ibm.mq.allclient:v9.1.2.0. 如果您使用的是 Maven,請使用以下依賴項(MQC91:IBM MQ 客戶端)。


<dependency>

    <groupId>com.ibm.mq</groupId>

    <artifactId>com.ibm.mq.allclient</artifactId>

    <version>9.1.2.0</version>

</dependency>

現在,如果應用程序在 Oracle JVM 上運行,我們應該說服 MQ 客戶端庫使用 Oracle JVM 兼容的密碼套件名稱。為此,請將其添加-Dcom.ibm.mq.cfg.useIBMCipherMappings=false為 JVM 標志或將其添加System.setProperty("com.ibm.mq.cfg.useIBMCipherMappings", "false")為系統屬性。


選擇適當的密碼套件與 MQ 通信。IBM MQ classes for JMS 文檔中的TLS CipherSpecs 和 CipherSuites將很有幫助,因為 IBM 已經棄用了IBMMQ 9 之后的一些弱密碼規范。


我建議使用ECDHE_*密碼規范,因為它們提供Ephemeral Keys來維護Forward Secrecy。


然后,使用ikeymanGUI 工具,我創建了一個self-signed以名稱標記的證書ibmwebspheremq<queue_manager_name>,而不是提取.arm文件,我將證書導出為.jks文件。keystore.jks和文件都truststore.jks從同一個證書中導出。之后,使用系統屬性將它們附加到應用程序;


System.setProperty("javax.net.ssl.trustStore", "truststore.jks");

System.setProperty("javax.net.ssl.trustStorePassword", "<password>");

System.setProperty("javax.net.ssl.keyStore", "keystore.jks");

System.setProperty("javax.net.ssl.keyStorePassword", "<password>");

通過此配置,SSL 握手問題消失了,但 IBM MQ 仍要求使用用戶名和密碼進行用戶身份驗證。為了提供它們,應該將這些屬性添加到MQEnvironment,


MQEnvironment.properties.put(com.ibm.mq.constants.CMQC.USER_ID_PROPERTY, "<user_name>");

MQEnvironment.properties.put(com.ibm.mq.constants.CMQC.PASSWORD_PROPERTY, "<password>");

在我的案例中,這些憑據是系統憑據。


如果您只是想像這樣跳過用戶身份驗證,您可以runmqsc像這樣使用 CLI 工具更新 IBMMQ 配置以跳過憑證檢查(請參閱此在隊列管理器文檔上打開連接身份驗證),


ALTER QMGR CONNAUTH(USE.PW)

DEFINE AUTHINFO(USE.PW) +

AUTHTYPE(IDPWOS) +

FAILDLAY(10) +

CHCKLOCL(OPTIONAL) +

CHCKCLNT(OPTIONAL)

REFRESH SECURITY TYPE(CONNAUTH)

請注意,CHCKCLNT需要將值設置為OPTIONAL忽略客戶端用戶憑據檢查。IBM MQ 應該開始使用客戶端應用程序,同時在這些配置后啟用 SSL。


查看完整回答
反對 回復 2022-12-15
?
慕容3067478

TA貢獻1773條經驗 獲得超3個贊

注意:在已刪除的評論中添加答案以捕獲提供給 OP 的信息。


有關顯示與 MQ v9.1 的證書類型兼容性的表格,請參閱以下 IBM MQ 知識中心頁面:

IBM MQ 9.1.x/IBM MQ/安全/消息的機密性/啟用密碼規范

密碼ECDHE_ECDSA需要隊列管理器的套件 b 證書。如果為您的應用程序使用客戶端證書,它還需要是套件 b。

請注意,您可以使用ECDHE_RSA非套件 b 證書的密碼。


隊列管理器使用存儲文件 ( key.sth for example) 來訪問該kdb文件??蛻舳说?java 等效項是您指定 jks 密碼。


查看完整回答
反對 回復 2022-12-15
  • 2 回答
  • 0 關注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號