2 回答

TA貢獻1798條經(jīng)驗 獲得超7個贊
經(jīng)過一段時間的工作,我能夠解決這個問題。從一開始我就在應(yīng)用程序端遇到了這個證書配置問題。即使在創(chuàng)建self-signed標(biāo)記為之后的證書并使用工具ibmwebspheremq<queue_manager_name>與客戶端應(yīng)用程序共享提取的證書之后,也會發(fā)生這種情況。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>
現(xiàn)在,如果應(yīng)用程序在 Oracle JVM 上運行,我們應(yīng)該說服 MQ 客戶端庫使用 Oracle JVM 兼容的密碼套件名稱。為此,請將其添加-Dcom.ibm.mq.cfg.useIBMCipherMappings=false為 JVM 標(biāo)志或?qū)⑵涮砑覵ystem.setProperty("com.ibm.mq.cfg.useIBMCipherMappings", "false")為系統(tǒng)屬性。
選擇適當(dāng)?shù)拿艽a套件與 MQ 通信。IBM MQ classes for JMS 文檔中的TLS CipherSpecs 和 CipherSuites將很有幫助,因為 IBM 已經(jīng)棄用了IBMMQ 9 之后的一些弱密碼規(guī)范。
我建議使用ECDHE_*密碼規(guī)范,因為它們提供Ephemeral Keys來維護Forward Secrecy。
然后,使用ikeymanGUI 工具,我創(chuàng)建了一個self-signed以名稱標(biāo)記的證書ibmwebspheremq<queue_manager_name>,而不是提取.arm文件,我將證書導(dǎo)出為.jks文件。keystore.jks和文件都truststore.jks從同一個證書中導(dǎo)出。之后,使用系統(tǒng)屬性將它們附加到應(yīng)用程序;
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 仍要求使用用戶名和密碼進行用戶身份驗證。為了提供它們,應(yīng)該將這些屬性添加到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>");
在我的案例中,這些憑據(jù)是系統(tǒng)憑據(jù)。
如果您只是想像這樣跳過用戶身份驗證,您可以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需要將值設(shè)置為OPTIONAL忽略客戶端用戶憑據(jù)檢查。IBM MQ 應(yīng)該開始使用客戶端應(yīng)用程序,同時在這些配置后啟用 SSL。

TA貢獻1773條經(jīng)驗 獲得超3個贊
注意:在已刪除的評論中添加答案以捕獲提供給 OP 的信息。
有關(guān)顯示與 MQ v9.1 的證書類型兼容性的表格,請參閱以下 IBM MQ 知識中心頁面:
IBM MQ 9.1.x/IBM MQ/安全/消息的機密性/啟用密碼規(guī)范
密碼ECDHE_ECDSA
需要隊列管理器的套件 b 證書。如果為您的應(yīng)用程序使用客戶端證書,它還需要是套件 b。
請注意,您可以使用ECDHE_RSA
非套件 b 證書的密碼。
隊列管理器使用存儲文件 ( key.sth for example
) 來訪問該kdb
文件??蛻舳说?java 等效項是您指定 jks 密碼。
添加回答
舉報