最近、IBM MQ v8 から IBM MQ v9 (具体的には v9.1.2.0) に移行しました。SSL を使用してブローカーと通信しました。非推奨の CipherSpecsドキュメントによると、IBM は MQ 8 で登場した暗号スイートの数を非推奨にしました。したがって、Oracle JVM (バージョン 1.8.0_211) で実行されるアプリケーションで動作するように、新しい TLS 暗号スイートを実装しました。ただし、アプリケーションで次の例外が発生して以来、;
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 でも既に使用可能な同等の 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 に追加するにはどうすればよいですか?
このProblem Connecting a Java Client (JMS) to a IBM MQ question は、同じパラメーターをシステム プロパティとしてアプリケーションに追加する必要があることを示唆していますがSystem.setProperty("com.ibm.mq.cfg.useIBMCipherMappings", "false")
、違いはありませんでした。
Java connection to WMQ 8 question にも同じ解決策が記載されていますが、この JVM 引数を IBM MQ に追加する方法については言及されていません。
更新 1
JVM 引数を IBM MQ に追加する方法について調査しました。しかし、Websphere アプリケーション サーバーのソリューションしか見つかりませんでした。
アプリケーションで現在使用している CipherSuite は次のとおりです。
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 (Oracle JRE 準拠)
IBM MQ にはそれぞれがあります。
ECDHE_ECDSA_AES_128_CBC_SHA256 (IBM MQ 準拠)
更新 2
オプション キュー マネージャーを使用してツールを使用してkey.kdb
ファイルを作成すると、ファイル内の証明書を正常に読み取ることができます。また、 のラベルが付いた自己署名証明書も含めました。しかし今、クライアント側で別の例外が発生しています。ikeyman
stash
ibmwebspheremq<lowercase_queue_manage_name>
Exception in thread "main" com.ibm.mq.MQException: MQJE001: Completion Code '2', Reason '2059'.
at com.ibm.mq.MQManagedConnectionJ11.<init>(MQManagedConnectionJ11.java:255)
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)
そして、MQ ログでこのエントリを見つけることができます。
AMQ9637E: Channel is lacking a certificate.
いくつかの説明付き。