0

最近、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 準拠の暗号スイート名を使用できるようになる場合があります。私の質問は、

  1. この 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ファイルを作成すると、ファイル内の証明書を正常に読み取ることができます。また、 のラベルが付いた自己署名証明書も含めました。しかし今、クライアント側で別の例外が発生しています。ikeymanstashibmwebspheremq<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.

いくつかの説明付き。

4

2 に答える 2

1

注: 削除されたコメントで OP に提供された情報を取得するための回答を追加します。


MQ v9.1 との証明書タイプの互換性を示す表については、次の IBM MQ ナレッジ センター ページを参照してください。

IBM MQ 9.1.x/IBM MQ/メッセージの保護/機密性/CipherSpec の有効化

を使用する暗号にECDHE_ECDSAは、キュー マネージャー用のスイート b 証明書が必要です。アプリケーションにクライアント証明書を使用する場合は、スイート b である必要もあります。

ECDHE_RSA非スイート b 証明書で暗号を使用できることに注意してください。


stash ファイル ( key.sth for example) は、ファイルにアクセスするためにキュー マネージャーによって使用されkdbます。クライアント側で Java に相当するのは、jks パスワードを指定することです。

于 2019-05-30T13:25:31.530 に答える