2016-12-14 42 views
2

セキュアなSSL接続を使用してリモート・キューに接続しようとしています。私は、SSL接続とキューマネージャの詳細に関して、サードパーティから提供された詳細をすべて持っています。私はV8バージョンのMQクライアントをWindowsマシンにインストールしています。SSLを使用してリモート・キューに接続するIBM Webshpere MQクライアント

thirdpartyが共有しているSSLフォルダには、jks、kdb、rdb、およびsthファイルが含まれています。

私があなたならば、私は感謝、私はいくつかのことを試してみましたが、私は例外 「MQRC_SSL_INITIALIZATION_ERROR」

を取得し終わる.NETコンソールアプリケーション

const string SslKeyRepository = @"ssl folder location with key name included"; 
     const string CipherSpec = "TLS_RSA_WITH_3DES_EDE_CBC_SHA"; 
     const string CipherSuite = "SSL_RSA_WITH_3DES_EDE_CBC_SHA"; 
     const string SslPeerName = "Peername"; 
     const string ConnectionType = MQC.TRANSPORT_MQSERIES_CLIENT; 

static Hashtable init(String connectionType) 
     { 
      Hashtable connectionProperties = new Hashtable 
      { 
       {MQC.TRANSPORT_PROPERTY, connectionType}, 
       {MQC.PORT_PROPERTY, 1496}, 
       {MQC.SSL_CERT_STORE_PROPERTY, SslKeyRepository}, 
       {MQC.SSL_CIPHER_SPEC_PROPERTY, CipherSpec}, 
       {MQC.SSL_PEER_NAME_PROPERTY, $"CN=\"{SslPeerName}\""} 
      }; 

      // Add the connection type 

      // SSL 

      // Set up the rest of the connection properties, based on the 
      // connection type requested 
      switch (connectionType) 
      { 
       case MQC.TRANSPORT_MQSERIES_BINDINGS: 
        break; 
       case MQC.TRANSPORT_MQSERIES_CLIENT: 
       case MQC.TRANSPORT_MQSERIES_XACLIENT: 
       case MQC.TRANSPORT_MQSERIES_MANAGED: 
        connectionProperties.Add(MQC.HOST_NAME_PROPERTY, HostName); 
        connectionProperties.Add(MQC.CHANNEL_PROPERTY, Channel); 
        break; 
      } 

      return connectionProperties; 
     } 

のプロパティを初期化するコードの下に使用しています

これで私を助けることができます。

+1

私は@prashantオフラインで連絡を受けました。 Peer Nameで問題が疑われる場合は、形式が正しく表示されません。 – Shashi

+0

@ ShashiなぜSSLに関連する例外が出るのですか?これは、ピアの名前に関連するものでなければなりません。特定のユーザーIDでコンソールアプリケーションを実行する必要がありますか?私は第三者から "useridとなる可能性があり、キーストアファイルIDが一致しない"という応答を受けました。 – prashant

+0

PeerNameは、安全なチャネルを初期化するために必要な属性です。安全なチャネルの初期化中に発生したエラーの場合、IBM MQはMQRC_SSL_INITIALIZATION_ERRORを返します。アプリケーションが設定したSSL属性が正しいことを第三者に確認しましたか? – Shashi

答えて

0

​​には多くの理由があります。キーストアファイルにアクセスできるかどうかなどの機械的な問題があります。ハンドシェークが失敗するかどうかなどの手順もあります。診断する最良の方法は、体系的に構成をチェックしてから、差動テストを実行することです。

最初の部分については、次の点を確認してください。すでに行っている場合は、角を切らないでください。再びそれを行う。

  • 証明書は、それが構造的に無傷であるとstashファイルが適切なパスワードを使用して存在していることを確認するために、KDBに対してrunmqakm -cert -listを発行することによってアクセス可能であることを確認します。
  • kdbファイルが世界中で読み取り可能なディレクトリにないことは、ファイルが世界的に読めるようにマークされていないことを確認してください。
  • アプリケーションを実行するサービスアカウントが、KDBファイルの所有者であり、フォルダを含み、書き込みアクセス権を持っていることを確認します。 (なぜ、GSKitは実行時にKDBが書き込み可能でなければならないと主張しているのか分かりません)
  • 問題runmqakm -cert -detailsは、キュー・マネージャーに対応する証明書が存在するかどうか、および詳細を確認します。 QMgrが自己署名証明書を使用する場合は、1つしかありません。 QMgrがCA署名付き証明書を使用する場合は、中間署名者とルート署名者が必要です。
  • 第三者からSSLCAUTH(OPTIONAL)またはSSLCAUTH(REQUIRED)のいずれかを指定しているかどうかを確認します。 OPTIONALの場合、KDBには個人証明書は必要ありません。署名者のみ。 REQUIREDの場合、KDB には個人証明書が必要で、小文字のラベルはibmwebspheremq[serviceaccount]である必要があります。差動テストのために

、次のテストのいくつか試してみてください。(注意をTLSを使用して、ローカルQMGRに接続することによって

  • テストアプリを:MQは長年、SSLを使用していないそれはTLSですただし、古いフィールド名にはSSLラベルが残っていますが、)は、が正しく設定されていることがわかるまでです。 MQ Advanced for Developersのコピーを手に入れて、あなた自身のQMgrを使ってデスクトップ上で統合テストを行うことができます。完全に無料でライセンスされています。
  • サンプルプログラムの1つを使用してテストします。実際のアプリがPUTまたはGETのキューにあるかどうかによって、amqsputcまたはamqsgetcを使用してください。これらは、同じKDB、samme certsなどを使用します。主な違いは、それらが既知の良いコードであることです。
  • ビジネスパートナにSSLなしでテストをさせて、構成の「機械的」部分が正しいことを確認するよう依頼してください。これには、ファイアウォールルーティング、ホスト、ポートとチャネル名、QMgr名などが含まれます。プレーンテキストチャネルで接続できない場合、TLSチャネルでは成功しません。
  • これが機能したら、SSLを有効にして、QMgrにSSLCAUTH(OPTIONAL)を設定してテストします。これは、クライアントがQMgrの証明書を検証できることを示しています。
  • これが機能し、相互認証を使用することが目的ならば、QMgrにSSLCAUTH(REQUIRED)、ローカルKDBには個人証明書でテストします。これは、QMgrがクライアントの証明書を検証できることを示しています。
  • 次に、SSLPEERをオンにして、QMgr証明書のDNをフィルタリングします。

これらが役に立たない場合は、テストの詳細な結果を質問に反映してください。最も一般的な問題は、証明書ラベルとKDBのアクセス許可です。ビジネスパートナがJKSとKDBを提供した場合、これらは一般的にではなく、には個人証明書が付いています。

+0

詳細な回答にはありがたいです。私はそれを試してみましょう。 – prashant

関連する問題