IBM Cloud Docs
Application Advanced Message Security (AMS) の使用可能化

Application Advanced Message Security (AMS) の使用可能化

このガイドでは、アプリケーション・レベルで Advanced Message Security を使用可能にする方法について説明します。

IBM MQ Advanced Message Security とは

非同期メッセージング・システムでは、1 つのプロセス (送信側またはパブリッシャーと呼ばれる) がキュー・マネージャーに接続してメッセージを書き込み、別の独立したプロセス (受信側またはサブスクライバーと呼ばれる) がキュー・マネージャーに接続してメッセージをコンシュームします。 これらの 2 つのプロセスは疎結合されており、お互いに相手の動きを直接認識できません。 コンシューマー・アプリケーションがアクセスできる ID 情報は、メッセージそのものの中にある ID 情報のみです。 メッセージが転送中に変更されたり、無許可の送信者によって生成されたりしていても、コンシューマーがプレーン・テキスト・メッセージでその状況を検出することはできません。 この場合、コンシューマー・アプリケーションはメッセージの ID を信頼しますが、認証性を検証することはできません。 また、こうしたプロセスでは、キュー・マネージャー内に保持されているときにメッセージがインターセプトされて変更される可能性もあります。

IBM® MQ Advanced Message Security は MQ のセキュリティー・サービスを拡張し、「メッセージ」レベルのセキュリティーを提供して重要なデータ (高価値の金融取引や個人情報など) を保護します。 MQ Advanced Message Security はインターセプターに基づきます。つまり、アウトバウンド・メッセージはインターセプトされ、署名され、オプションで暗号化されてから、キュー・マネージャーに渡されます。 キュー・マネージャーからのインバウンド・メッセージは AMS 層で受信され、必要に応じて復号および検証されてから、受信側アプリケーションに渡されます。 AMS アーキテクチャーでは、アプリケーション・プログラムのロジックをほとんどあるいはまったく変更せずに、メッセージを暗号で保護し、メッセージの個々の送信者および受信者を許可する詳細な保護ポリシーを適用することができます。

IBM MQ AMS には、アプリケーション AMS とキュー・マネージャー AMS という 2 つのアプローチがあります。 このチュートリアルでは、アプリケーション AMS に焦点を当てます。

AMS 保護ポリシー

保護ポリシーは、メッセージを保護するために使用される保護の品質を定義します。 AMS は、メッセージ・コンテンツの署名および暗号化を可能にするメッセージ保護ポリシーを提供します。 AMS ポリシーは、MQ 管理者によってターゲット・キューに定義され、各キューはゼロまたは 1 つのポリシーを持つことができます。 ポリシーでは、署名操作および暗号化操作に使用されるアルゴリズムを指定できます。 メッセージ保護ポリシーには、次の 2 つのタイプがあります。

  • メッセージ保全性ポリシー。このポリシーでは、メッセージにデジタル署名が適用されますが、メッセージの内容はプレーン・テキストのままとなります。
  • メッセージ・プライバシー・ポリシー。このポリシーを使用する場合は、メッセージの内容も暗号化されます。 メッセージ・プライバシー・ポリシーには、メッセージの保全性も含まれます。

このポリシーでは、暗号化が指定されている場合は、許可されたすべての受信者も指定する必要があり、送信者はローカルの鍵ストアにそれらの受信者の公開鍵を保有している必要があります。

エンドツーエンド・メッセージ・セキュリティー

メッセージをエンドツーエンドで保護するためには、以下の点を考慮する必要があります。

  1. 転送中のメッセージが保護されること。
  2. 予期されるソースからメッセージが発信されているという保証。
  3. 意図された受信者のみがメッセージを表示できること。
  4. 転送中にメッセージが変更されていないという保証。

キュー・マネージャーそのものに暗号化メカニズムを組み込むと、アプリケーションを変更する労力を削減できますが、それで問題が完全に解決されるわけではありません。 キュー・マネージャーにはメッセージを暗号化して復号する機能があるため、受信者にとっては、受信したメッセージが本物であるという保証がありません。 例えば、B2B の場合、トポロジーはハブとスポークのトポロジーとなります。このトポロジーでは、クリアリングハウスがハブとして機能し、各スポークは異なるビジネス・パートナーになります。 改ざんのない本物のメッセージをあることを保証するこのようなシナリオでは、エンドツーエンドの保護が望ましい解決策になります。

アプリケーション AMS は、X.509 証明書の識別名で表される送信者 ID を暗号化してメッセージにバインドすることにより、エンドツーエンドのメッセージ・レベル・セキュリティーを提供します。 必要に応じて、X.509 証明書によっても識別されている特定の受信者用にメッセージを暗号化することもできます。 メッセージに送信者 ID と受信者 ID をバインドして改ざんを防止する機能を使用すると、メッセージを送信または受信できるユーザーに関するポリシーを簡単に作成でき、それらのポリシーの適用はメッセージごとに行われます。

このチュートリアルでは、送信側と受信側に自己署名証明書を使用します。 実動ユース・ケースでは CA 証明書を使用することを強くお勧めします。 自己署名証明書は、テストやデモの目的でのみ使用されます。

開始前に

  1. 既存の MQ on Cloud キュー・マネージャー。ない場合は、キュー・マネージャーを作成してください。
  2. キュー・マネージャーの接続の詳細については、*『付録 1』*を参照してください。
  3. 管理ユーザー名と API キーについては、*『付録 2』*を参照してください。
  4. IBM MQ Client。このチュートリアルでは runmqsc を使用します。インストール方法については、*『付録 3』*を参照してください。

メッセージの送信側と受信側のセットアップ

このチュートリアルでは、AMS をセットアップしてエンドツーエンド・メッセージ・セキュリティーを実例で示すために alicebob という 2 人のユーザーを使用します。 alice はメッセージの送信者、bob はメッセージの受信者です。 実世界では、メッセージの送信側と受信側は異なるシステムで実行され、AMS を使用してメッセージの送信側と受信側の間でメッセージ保護を実施することにより、メッセージが改ざんのない本物であることが保証されます。

このチュートリアルでは、これらのユーザーを MQ on Cloud サービス上でユーザー資格情報 またはアプリケーション資格情報 として作成する必要があります。 このチュートリアルでは、アプリケーション資格情報を使用します。つまり、アプリケーションに許可を与えて、このアプリケーションがメッセージの書き込みのためにキュー・マネージャーにアクセスできるようにします。この許可のためにこのアプリケーションで使用するユーザー名は alice です。 同様に、メッセージを取得するためにキュー・マネージャーにアクセスする権限をアプリケーションに付与します。この許可に使用するユーザー名は bob です。

  1. IBM Cloud にログインします。
  2. IBM Cloud ダッシュボードで、「サービス」のリストから、望ましい mq on cloud キュー・マネージャーが使用可能であるサービス・インスタンスを見つけます。 サービス・インスタンスをクリックして開きます。 サービス・インスタンスを示すイメージ
  3. これにより、「キュー・マネージャー」ビューが開きます。 **「アプリケーション資格情報」**タブを選択します。 アプリケーション権限が丸で囲まれたキュー・マネージャーのリストを示すイメージ
  4. **「追加」**ボタンをクリックして、以下のイメージに示すようにフォームにユーザー alice に関する情報を入力します。
    1. フォームの**「表示名:」**フィールドに、値 alice を入力します。
    2. フォームの**「アプリケーション・ユーザー名:」**フィールドには、alice が自動的に取り込まれます。
    3. **「API キーの追加と生成 (Add and generate API key)」**をクリックします。
      現在設定されているアプリケーション権限を示す画像
  5. ユーザーが追加されると、新しい apiKey が生成され、ポップアップ・ウィンドウに表示されます。 「ダウンロード」 をクリックして applicationApiKey.json をダウンロードし、ファイルを "applicationApiKey<userName>.json (例: "applicationApiKeyalice.json) として任意の場所に保存します。
    applicationApiKey.json のダウンロードを示すイメージ
  6. 次に、 「追加」 をクリックし、以下の図に示すように、ユーザー bobのフォームに入力します。
    6.1 フォームの**「表示名:」フィールドに、値 bob を入力します。 6.2 フォームの「アプリケーション・ユーザー名:」**フィールドには、bob が自動的に取り込まれます。 6.2 **「API キーの追加と生成 (Add and generate API key)」**をクリックします。
    現在設定されているアプリケーション権限を示す画像
  7. ユーザーが追加されると、新しい apiKey が生成され、ポップアップ・ウィンドウに表示されます。 「ダウンロード」 をクリックして applicationApiKey.json をダウンロードし、ファイルを "applicationApiKey<username>.json (例: "applicationApiKeybob.json) として任意の場所に保存します。
    「applicationApiKey.json ダウンロード」を示すイメージ

AMS を構成する前のメッセージの送受信

AMS 構成の最初のステップとして、alicebob がメッセージを送受信できるか確認することができます。 そうすることにより、クライアントとキュー・マネージャーが通信してメッセージをやり取りできるかどうかを確認します。 このチュートリアルの以降のセクションでは、AMS のセットアップと構成について説明します。 ここでは、alice を送信側、bob を受信側として使用して、ターゲット・キューでプレーン・テキストのメッセージを送受信します。

  1. 2 つのコマンド・シェルを開きます。 1 つはユーザー alice 用で、もう 1 つはユーザー bob 用です。

    1. コマンド・シェルの 1 つを alice 用に使用し、ここで alice のすべてのステップを実行します。 これ以降、このコマンド・シェルを alice のコマンド・シェルと呼ぶことにします。
    2. もう 1 つのコマンド・シェルを bob 用に使用し、ここで bob のすべてのステップを実行します。 これ以降、このコマンド・シェルを bob のコマンド・シェルと呼ぶことにします。
    3. このチュートリアルでは、alice のコマンド・シェルと bob のコマンド・シェルが必要になります。 したがって、これらは、このチュートリアルのすべてのステップを完了するまで、閉じないでください。
  2. alice のコマンド・シェルで以下の環境変数を作成します。

    • Linux/Mac の場合:
      export MQSAMP_USER_ID=alice  
      export MQSERVER="CLOUD.ADMIN.SVRCONN/TCP/<HOSTNAME>(<PORT>)"
      
    • Windows の場合:
      set MQSAMP_USER_ID=alice  
      set MQSERVER=CLOUD.ADMIN.SVRCONN/TCP/<HOSTNAME>(<PORT>)
      
    • <HOSTNAME> - これは connection_info.txt ファイル内の「hostname」です (Appendix#1 を参照)
    • <PORT> - これは connection_info.txt ファイル内の「listenerPort」です (Appendix#1 を参照)。
  3. bob のコマンド・シェルで以下の環境変数を作成します。

    • Linux/Mac の場合:
      export MQSAMP_USER_ID=bob  
      export MQSERVER="CLOUD.ADMIN.SVRCONN/TCP/<HOSTNAME>(<PORT>)"
      
    • Windows の場合:
      set MQSAMP_USER_ID=bob  
      set MQSERVER=CLOUD.ADMIN.SVRCONN/TCP/<HOSTNAME>(<PORT>)
      
    • <HOSTNAME> - これは connection_info.txt ファイル内の「hostname」です (Appendix#1 を参照)
    • <PORT> - これは connection_info.txt ファイル内の「listenerPort」です (Appendix#1 を参照)。
  4. alice のコマンド・シェルから、ターゲット・キューにメッセージを送信するサンプル・プログラムを実行します。

    amqsputc DEV.QUEUE.1 <your Queue manager name>  
    
    1. パスワードの入力を求めるプロンプトが出されたら、alice のアプリケーション API キーを入力します (これは "applicationApiKeyalice.json ファイル内の「apiKey」値です)。
    2. メッセージのテキストを入力し、Enter キーを 2 回押すと、単一のメッセージのみが送信されます。

    Enter キーを 2 回押すと、サンプル・アプリケーションが終了します。

    プレーン・テキスト・メッセージを送信する alice を示すイメージ

  5. 次は、ユーザー bob がターゲット・キューからメッセージを取得できるかを確認します。

    1. bob のコマンド・シェルから、メッセージを受信するためのサンプル・プログラムを実行します。
      amqsgetc DEV.QUEUE.1 <your Queue manager name>  
      
    2. パスワードの入力を求めるプロンプトが出されたら、bob のアプリケーション API キーを入力します (これは "applicationApiKeybob.json ファイルの「apiKey」値です)。
    3. 受信したメッセージが表示されます。 message <Hello> は、ユーザー bob がターゲット・キューからメッセージを読み取ることができることを確認します。
      プレーン・テキスト・メッセージを受け取る bob を示すイメージ
    • メッセージはプレーン・テキストでターゲット・キューに保管されているので、キューの読み取り時にメッセージがプレーン・テキストで返されることに注意してください。

このテストによって、alicebob がターゲット・キューでメッセージを送受信できることが確認されました。 次のステップは、エンドツーエンド・セキュリティーのために AMS に必要な構成の作成です。 これには、メッセージの署名と暗号化を実施するために、これらのユーザーの鍵ストアと証明書を作成することが含まれます。

alice および bob の鍵ストアのセットアップ

アプリケーション AMS は、標準の X.509 証明書に保管された鍵を使用する公開鍵/秘密鍵暗号化に基づいており、これらの証明書はプラットフォームに適した鍵ストアに保管されます。 これらの証明書は、MQ Secure Sockets Layer (SSL) および Transport Layer Security (TLS) の暗号化に使用されるものと同じタイプの証明書であり、希望する場合は実際に、アプリケーションで同じ証明書と鍵ストアをこれらの両方の暗号化のために使用することも可能です。 このチュートリアルでは、ユーザー alice および bob の新しい鍵ストアと証明書を作成します。

alice のコマンド・シェルで alice のすべてのステップを実行し、bob のコマンド・シェルで bob のすべてのステップを実行する必要があります。

  1. 鍵ストアをセットアップするためのディレクトリーの作成
    For alice:
        - On Mac: mkdir -p ~/alice/.mqs
        - On Linux:  mkdir -p /home/alice/.mqs
        - On Windows: mkdir %HOMEDRIVE%\Users\alice\.mqs
    
    For bob:
        - On Mac: mkdir -p ~/bob/.mqs
        - On Linux: mkdir -p /home/bob/.mqs  
        - On Windows: mkdir %HOMEDRIVE%\Users\bob\.mqs
    
  2. 鍵データベースの作成
     For alice:
         - On Mac: runmqakm -keydb -create -db ~/alice/.mqs/alicekey.kdb -pw passw0rd -stash
         - On Linux: runmqakm -keydb -create -db /home/alice/.mqs/alicekey.kdb -pw passw0rd -stash  
         - On Windows: runmqakm -keydb -create -db %HOMEDRIVE%\Users\alice\.mqs\alicekey.kdb -pw passw0rd -stash
    
     For bob:
         - On Mac: runmqakm -keydb -create -db ~/bob/.mqs/bobkey.kdb -pw passw0rd -stash
         - On Linux: runmqakm -keydb -create -db /home/bob/.mqs/bobkey.kdb -pw passw0rd -stash
         - On Windows: runmqakm -keydb -create -db %HOMEDRIVE%\Users\bob\.mqs\bobkey.kdb -pw passw0rd -stash  
    
  3. 鍵データベースが読み取り可能であることの確認 (Linux および Mac のみ)
    Mac:
    For alice:
        chmod +r ~/alice/.mqs/alicekey.kdb
    For bob:   
        chmod +r ~/bob/.mqs/bobkey.kdb
    
    Linux:
    For alice:     
        chmod +r /home/alice/.mqs/alicekey.kdb  
    For bob:   
        chmod +r /home/bob/.mqs/bobkey.kdb  
    
  4. ユーザー alice の自己署名証明書の作成
    On Mac:
        - runmqakm -cert -create -db ~/alice/.mqs/alicekey.kdb -pw passw0rd -label Alice_Cert -dn "cn=alice,O=IBM,c=GB" -default_cert yes
    
    On Linux:
        - runmqakm -cert -create -db /home/alice/.mqs/alicekey.kdb -pw passw0rd -label Alice_Cert -dn "cn=alice,O=IBM,c=GB" -default_cert yes  
    
    On Windows:
        - runmqakm -cert -create -db %HOMEDRIVE%\Users\alice\.mqs\alicekey.kdb -pw passw0rd -label Alice_Cert -dn "cn=alice,O=IBM,c=GB" -default_cert yes  
    
  5. ユーザー bob の自己署名証明書の作成
    On Mac:
        - runmqakm -cert -create -db ~/bob/.mqs/bobkey.kdb -pw passw0rd -label Bob_Cert -dn "cn=bob,O=IBM,c=GB" -default_cert yes
    
    On Linux:
        - runmqakm -cert -create -db /home/bob/.mqs/bobkey.kdb -pw passw0rd -label Bob_Cert -dn "cn=bob,O=IBM,c=GB" -default_cert yes  
    
    On Windows:
        - runmqakm -cert -create -db %HOMEDRIVE%\Users\bob\.mqs\bobkey.kdb -pw passw0rd -label Bob_Cert -dn "cn=bob,O=IBM,c=GB" -default_cert yes
    

ターゲット・キューの保護ポリシーのセットアップ

MQ Advanced Message Security は、セキュリティー・ポリシーを使用して、キューを流れるメッセージを暗号化して認証するための暗号と署名のアルゴリズムを指定します。 メッセージ・セキュリティーを有効にするには、キューに AMS ポリシーを設定する必要があります。

  1. 新しいコマンド・シェルを開きます

  2. MQSERVER 環境変数を作成します

    On Linux and Mac: export MQSERVER="CLOUD.ADMIN.SVRCONN/TCP/<HOSTNAME>(<PORT>)"  
    On Windows: set MQSERVER=CLOUD.ADMIN.SVRCONN/TCP/<HOSTNAME>(<PORT>)  
    
    • <HOSTNAME> - これは connection_info.txt ファイル内の「hostname」です。
    • <PORT> - これは connection_info.txt ファイル内の「listenerPort」です。
  3. runmqsc を実行して、リモート・キュー・マネージャーに接続します

    runmqsc -c -u <ADMIN_MQ_USER> <QUEUE_MANAGER_NAME>  
    
    • <ADMIN_MQ_USER> - これは platformApiKey.json ファイル内の「mqUsername」です (このチュートリアルの最後にある付録 2 を参照)。
    • <QUEUE_MANAGER_NAME> - これは connection_info.txt ファイル内の「queueManagerName」です。
    • "-c" は、MQSERVER 変数を使用してリモート・キュー・マネージャーに接続するように runmqsc に指示します
  4. 端末からパスワードを入力するよう求められます。
    これは platformApiKey.json ファイル内の「apiKey」値です (このチュートリアルの最後にある付録 2 を参照)。

  5. 端末は入力待ちになります。

  6. ターゲット・キューに対して新しい AMS ポリシーを作成します

    SET POLICY(DEV.QUEUE.1) SIGNALG(SHA1) ENCALG(AES256) SIGNER('CN=alice,O=IBM,C=GB') RECIP('CN=bob,O=IBM,C=GB') ACTION(ADD)
    
    • DEV.QUEUE.1 はポリシー名であり、保護するキューの名前と一致しなければなりません。
    • SIGNALG(value) は、メッセージの署名のためのデジタル署名アルゴリズムを指定します。
    • ENCALG(value) は、メッセージの暗号化のためのデジタル暗号化アルゴリズムを指定します。
    • SIGNER(value) は、このチュートリアルの送信者 (つまり alice) の -dn の値です。
    • RECIP (value) は、このチュートリアルの受信者 (つまり bob) の -dn の値です。
    • SET POLICY コマンドについて詳しくは、こちらを参照してください。

    キューに設定された AMS 保護ポリシーを示すイメージ

  7. 先ほど定義した AMS ポリシーを検証します。セットアップに応じた署名および暗号化を使用してポリシーが正しく定義および構成されていることを確認するには、以下のコマンドを使用します。

    DISPLAY POLICY(DEV.QUEUE.1)
    

    runmqsc からの AMS 保護ポリシーの表示を示すイメージ

メッセージ暗号化を検証するための別名キューの作成

ここでは、メッセージがキューに保管されるときに暗号化されることを実証するために、別名キューを使用します。 別名キューを介してメッセージを取得すると、ターゲット・キュー上でインターセプターがトリガーされず、メッセージが復号されることなくそのまま取得されるので、メッセージがプレーン・テキストであるか暗号化されているかを正確に把握できます。

  1. キューをターゲットとする別名キューを作成する

    DEFINE QALIAS (DEV.QUEUE.1.ALIAS) TARGET (DEV.QUEUE.1)  
    
    • DEV.QUEUE.1.ALIAS は、別名キューの名前です
    • DEV.QUEUE.1 は、このチュートリアルで使用するターゲット・キューです

    作成される別名キューを示すイメージ

alicebob の間での公開鍵の共有

暗号化を使用して保護ポリシーを設定する場合は、メッセージのすべての許可された受信者もポリシーで指定する必要があります。 また、そのメッセージの送信者は、ローカル鍵ストア内にそれらの受信者の公開鍵を保有している必要があります。 ポリシーでは、許可された送信者を指定することもできます。この指定は、署名または暗号化されたメッセージに適用されます。この指定が適用される場合、受信者はメッセージの ID を検証するために送信者の公開鍵を持っている必要があります。 つまり、alice は、その鍵ストア内に bob の公開鍵を保有している必要があり、bob は、その鍵ストア内に alice の公開鍵を保有している必要があります。

このセクションでは、bob の公開鍵を抽出して、それを alice の鍵ストアに追加し、alice の公開鍵を抽出して、それを bob の鍵ストアに追加するための詳しいステップを説明します。

  1. bob の公開鍵を抽出して、それを alice の鍵ストアに追加します。

    On Mac:
        - runmqakm -cert -extract -db ~/bob/.mqs/bobkey.kdb -pw passw0rd -label Bob_Cert -target bob_public.arm  
        - runmqakm -cert -add -db ~/alice/.mqs/alicekey.kdb -pw passw0rd -label Bob_Cert -file bob_public.arm  
    
    On Linux:  
        - runmqakm -cert -extract -db /home/bob/.mqs/bobkey.kdb -pw passw0rd -label Bob_Cert -target bob_public.arm  
        - runmqakm -cert -add -db /home/alice/.mqs/alicekey.kdb -pw passw0rd -label Bob_Cert -file bob_public.arm  
    
    On Windows:  
        - runmqakm -cert -extract -db %HOMEDRIVE%\Users\bob\.mqs\bobkey.kdb -pw passw0rd -label Bob_Cert -target bob_public.arm  
        - runmqakm -cert -add -db %HOMEDRIVE%\Users\alice\.mqs\alicekey.kdb -pw passw0rd -label Bob_Cert -file bob_public.arm
    
  2. alice の公開鍵を抽出し、それを bob の鍵ストアに追加します。

    On Mac:
        - runmqakm -cert -extract -db ~/alice/.mqs/alicekey.kdb -pw passw0rd -label Alice_Cert -target alice_public.arm  
        - runmqakm -cert -add -db ~/bob/.mqs/bobkey.kdb -pw passw0rd -label Alice_Cert -file alice_public.arm  
    
    On Linux:  
        - runmqakm -cert -extract -db /home/alice/.mqs/alicekey.kdb -pw passw0rd -label Alice_Cert -target alice_public.arm  
        - runmqakm -cert -add -db /home/bob/.mqs/bobkey.kdb -pw passw0rd -label Alice_Cert -file alice_public.arm  
    
    On Windows:  
        - runmqakm -cert -extract -db %HOMEDRIVE%\Users\alice\.mqs\alicekey.kdb -pw passw0rd -label Alice_Cert -target alice_public.arm  
        - runmqakm -cert -add -db %HOMEDRIVE%\Users\bob\.mqs\bobkey.kdb -pw passw0rd -label Alice_Cert -file alice_public.arm
    
  3. alice がその鍵ストア内に bob の証明書 (の公開部分) を保有しており、bob がその鍵ストア内に alice の証明書 (の公開部分) を保有していることを確認します。 これを行うには、証明書の詳細を出力する以下のコマンドを実行します。

    For alice:
        - On Mac: runmqakm -cert -details -db ~/alice/.mqs/alicekey.kdb -pw passw0rd -label Bob_Cert
        - On Linux: runmqakm -cert -details -db /home/alice/.mqs/alicekey.kdb -pw passw0rd -label Bob_Cert  
        - On Windows: runmqakm -cert -details -db %HOMEDRIVE%\Users\alice\.mqs\alicekey.kdb -pw passw0rd -label Bob_Cert  
    
    For bob:
        - On Mac: runmqakm -cert -details -db ~/bob/.mqs/bobkey.kdb -pw passw0rd -label Alice_Cert
        - On Linux: runmqakm -cert -details -db /home/bob/.mqs/bobkey.kdb -pw passw0rd -label Alice_Cert  
        - On Windows: runmqakm -cert -details -db %HOMEDRIVE%\Users\bob\.mqs\bobkey.kdb -pw passw0rd -label Alice_Cert  
    

alice および bob の keystore.conf ファイルの作成

AMS インターセプターは、鍵ストアの場所と使用する証明書のラベルの詳細が含まれている、ユーザー (このチュートリアルでは、alice および bob) の構成ファイルを予期します。 AMS は、メッセージの署名と暗号化、およびエンドツーエンド保護の ID 検査のためにそれらを必要とします。 AMS は、構成ファイルの名前が " keystore.conf" であり、プレーン・テキスト形式の詳細が含まれていることを予期します。 それぞれのユーザーに、別個の keystore.conf ファイルが必要です。

このセクションでは、alice および bobkeystore.conf ファイルを作成する方法を説明します。

  1. ユーザー alice の .mqs ディレクトリーに新規ファイル keystore.conf を作成し、このファイルに以下の内容をコピーします。

    Mac の場合:

    cms.keystore=~/alice/.mqs/alicekey  
    cms.certificate=Alice_Cert  
    

    Linux の場合:

    cms.keystore=/home/alice/.mqs/alicekey  
    cms.certificate=Alice_Cert  
    

    Windows の場合:

    cms.keystore=%HOMEDRIVE%\Users\alice\.mqs\alicekey  
    cms.certificate=Alice_Cert  
    
    • %HOMEDRIVE% を、使用しているコンピューターでの値 (例: C:) に置き換えます。
  2. ユーザー bob の .mqs ディレクトリーに新規ファイル keystore.conf を作成し、そのファイルに以下の内容をコピーします。
    Mac の場合:

    cms.keystore=~/bob/.mqs/bobkey  
    cms.certificate=Bob_Cert
    

    Linux の場合:

    cms.keystore=/home/bob/.mqs/bobkey  
    cms.certificate=Bob_Cert  
    

    Windows の場合:

    cms.keystore=%HOMEDRIVE%\Users\bob\.mqs\bobkey  
    cms.certificate=Bob_Cert  
    
    • %HOMEDRIVE% を、使用しているコンピューターでの値 (例: C:) に置き換えます。

エンドツーエンドのメッセージ保護のテスト

MQ Advanced Message Security は、以下を提供します。

  • メッセージ保全性: メッセージごとのインバウンド・トラフィックの認証を可能にするとともに、メッセージの送信先にできるキューとメッセージを受け取ることができる受信者についての厳密な制限を可能にします。
  • メッセージ・プライバシー: AMS は、ターゲット・キューに設定された保護ポリシーに基づいて、メッセージがキューに入れられる前からメッセージを暗号化して、その内容が公開されないようにします。

エンドツーエンド・メッセージ・セキュリティーを実証するには、メッセージの保全性とメッセージのプライバシーを実証する必要があります。 ここでは、まずメッセージの保全性の実証から始めることにします。メッセージの保全性がある状態とは、無許可ユーザーに、保護キューへのアクセスが許可されていない状態です。 その後、許可ユーザー (この例では alicebob) が保護キューでメッセージを送受信できるかどうかを確認します。 最後に、保護キューに保存中のメッセージが暗号化されていて読み取り不可能であることを実証します。

メッセージ保全性の検査

メッセージの保全性が保護されていることが実証されるためには、署名または暗号化のポリシーに従わずに保護キューにアクセスしようとする試みがすべて失敗しなければなりません。 これをテストするために、環境変数 MQS_KEYSTORE_CONF を設定せずに送信側プログラムを実行してみることができます。 そのようにすると、AMS は署名に使用する鍵ストアと証明書を検出できなくなります。
alice はキュー・マネージャーとの接続を確立することができますが、保護キューを開こうとすると失敗します。なぜなら、このポイントは、AMS インターセプターがユーザー alice の ID を検査するポイントだからです。

  1. alice のコマンド・シェルで以下の環境変数を作成します。

    On Mac:
        export MQSAMP_USER_ID=alice  
        export MQSERVER="CLOUD.ADMIN.SVRCONN/TCP/<HOSTNAME>(<PORT>)"
    
    On Linux:
        export MQSAMP_USER_ID=alice  
        export MQSERVER="CLOUD.ADMIN.SVRCONN/TCP/<HOSTNAME>(<PORT>)"
    
    On Windows:
        set MQSAMP_USER_ID=alice  
        set MQSERVER=CLOUD.ADMIN.SVRCONN/TCP/<HOSTNAME>(<PORT>)
    
    • <HOSTNAME> - これは connection_info.txt ファイル内の「hostname」です。
    • <PORT> - これは connection_info.txt ファイル内の「listenerPort」です。
  2. サンプル・プログラムを実行して、メッセージを受信します。

    amqsputc DEV.QUEUE.1 <your Queue manager name>  
    
    • パスワードの入力を求めるプロンプトが出されたら、alice のアプリケーション API キーを入力します (これはファイル "applicationApiKeyalice.json の「"applicationApiKey」値です)。

    次のイメージは、alice が保護キューをオープンしようとして MQRC_NOT_AUTHORIZED で失敗したことを示しています。 保護キューへの書き込みの失敗を示すイメージ

メッセージ・セキュリティー検査 - ユーザーが保護キューにあるメッセージを送受信することを許可します。

alicebob には必要な構成があり、ターゲット・キューに定義されている保護ポリシーに完全に準拠しています。 したがって、alicebob は、保護キューの許可されたメッセージ送信者とメッセージ受信者であることになります。 ここでは、これを実証するために、alice のユーザー ID を使用して送信側プログラム (amqsputc) を実行し、保護キューにメッセージを送信します。 その後、bob のユーザー ID を使用して受信側プログラム (amqsgetc) を実行し、メッセージを受信します。

  1. alice のコマンド・シェルで以下の環境変数を作成します。
    On Mac:
        export MQSAMP_USER_ID=alice  
        export MQSERVER="CLOUD.ADMIN.SVRCONN/TCP/<HOSTNAME>(<PORT>)"
        export MQS_KEYSTORE_CONF="~/alice/.mqs/keystore.conf"
    
    On Linux:
        export MQSAMP_USER_ID=alice  
        export MQSERVER="CLOUD.ADMIN.SVRCONN/TCP/<HOSTNAME>(<PORT>)"
        export MQS_KEYSTORE_CONF="/home/alice/.mqs/keystore.conf"
    
    On Windows:
        set MQSAMP_USER_ID=alice  
        set MQSERVER=CLOUD.ADMIN.SVRCONN/TCP/<HOSTNAME>(<PORT>)
        set MQS_KEYSTORE_CONF=C:\Users\alice\.mqs\keystore.conf
    
    • <HOSTNAME> - これは connection_info.txt ファイル内の「hostname」です。
    • <PORT> - これは connection_info.txt ファイル内の「listenerPort」です。
  2. bob のコマンド・シェルで以下の環境変数を作成します。
    On Mac:
        export MQSAMP_USER_ID=bob  
        export MQSERVER="CLOUD.ADMIN.SVRCONN/TCP/<HOSTNAME>(<PORT>)"
        export MQS_KEYSTORE_CONF="~/bob/.mqs/keystore.conf"
    
    On Linux:
        export MQSAMP_USER_ID=bob  
        export MQSERVER="CLOUD.ADMIN.SVRCONN/TCP/<HOSTNAME>(<PORT>)"
        export MQS_KEYSTORE_CONF="/home/bob/.mqs/keystore.conf"
    
    On Windows:
        set MQSAMP_USER_ID=bob  
        set MQSERVER=CLOUD.ADMIN.SVRCONN/TCP/<HOSTNAME>(<PORT>)
        set MQS_KEYSTORE_CONF=C:\Users\bob\.mqs\keystore.conf
    
    • <HOSTNAME> - これは connection_info.txt ファイル内の「hostname」です。
    • <PORT> - これは connection_info.txt ファイル内の「listenerPort」です。
  3. alice コマンド・シェルからサンプル・プログラムを実行して、保護キューにメッセージを送信します。
    amqsputc DEV.QUEUE.1 <your Queue manager name>  
    
    3.1 パスワードの入力を求めるプロンプトが出されたら、 alice のアプリケーション API キーを入力します (これは、「applicationApiKeyalice.json」ファイルの「apiKey」値です)。
    3.2 メッセージのテキストを入力し、 Enter キーを 2 回押して単一メッセージのみを送信します。
    : Enter キーを 2 回押すと、サンプル・アプリケーションが終了します。
    保護されたキューにメッセージを送信する alice を示す図
  4. bob のコマンド・シェルから、メッセージを受信するためのサンプル・プログラムを実行します。
    amqsgetc DEV.QUEUE.1 <your Queue manager name>  
    
    4.1 パスワードの入力を求めるプロンプトが出されたら、 bob のアプリケーション API キーを入力します (これは、「applicationApiKeybob.json」ファイルの「apiKey」値です)。
    4.2. 受信したメッセージが message <Hello> 「bob がメッセージ・データを読み取れることを確認します。」 と表示されます。 保護された ueue からメッセージを受信しているボブを示すイメージ

メッセージ・プライバシー検査 - データが暗号化されて保管されているかどうかを検査します。

メッセージが暗号化されていることを実証するために、別名キューを使用してテストを行います。 別名キューを介してメッセージを取得すると、ターゲット・キュー上のインターセプターがトリガーされず、メッセージは復号されずにそのまま取得されるため、メッセージがプレーン・テキストであるか暗号化されているかを正確に把握できます。 ここでは、これを実証するために、alice のユーザー ID を使用して送信側プログラム (amqsputc) を実行し、保護キューにメッセージを送信します。 その後、bob のユーザー ID を使用して受信側プログラム (amqsgetc) を実行し、別名キューからメッセージを受信します。

  1. alice のコマンド・シェルで以下の環境変数を作成します。
    On Mac:
        export MQSAMP_USER_ID=alice  
        export MQSERVER="CLOUD.ADMIN.SVRCONN/TCP/<HOSTNAME>(<PORT>)"
        export MQS_KEYSTORE_CONF="~/alice/.mqs/keystore.conf"
    
    On Linux:
        export MQSAMP_USER_ID=alice  
        export MQSERVER="CLOUD.ADMIN.SVRCONN/TCP/<HOSTNAME>(<PORT>)"
        export MQS_KEYSTORE_CONF="/home/alice/.mqs/keystore.conf"
    
    On Windows:
        set MQSAMP_USER_ID=alice  
        set MQSERVER=CLOUD.ADMIN.SVRCONN/TCP/<HOSTNAME>(<PORT>)
        set MQS_KEYSTORE_CONF=C:\Users\alice\.mqs\keystore.conf
    
    • <HOSTNAME> - これは connection_info.txt ファイル内の「hostname」です。
    • <PORT> - これは connection_info.txt ファイル内の「listenerPort」です。
  2. bob のコマンド・シェルで以下の環境変数を作成します。
    On Mac:
        export MQSAMP_USER_ID=bob  
        export MQSERVER="CLOUD.ADMIN.SVRCONN/TCP/<HOSTNAME>(<PORT>)"
        export MQS_KEYSTORE_CONF=~/bob/.mqs/keystore.conf
    
    On Linux:
        export MQSAMP_USER_ID=bob  
        export MQSERVER="CLOUD.ADMIN.SVRCONN/TCP/<HOSTNAME>(<PORT>)"
        export MQS_KEYSTORE_CONF=/home/bob/.mqs/keystore.conf
    
    On Windows:
        set MQSAMP_USER_ID=bob  
        set MQSERVER=CLOUD.ADMIN.SVRCONN/TCP/<HOSTNAME>(<PORT>)
        set MQS_KEYSTORE_CONF=C:\Users\bob\.mqs\keystore.conf
    
    • <HOSTNAME> - これは connection_info.txt ファイル内の「hostname」です。
    • <PORT> - これは connection_info.txt ファイル内の「listenerPort」です。
  3. alice コマンド・シェルからサンプル・プログラムを実行して、保護キューにメッセージを送信します。
    amqsputc DEV.QUEUE.1 <your Queue manager name>  
    
    3.1 パスワードの入力を求めるプロンプトが出されたら、 alice のアプリケーション API キーを入力します (これは、「applicationApiKeyalice.json」ファイルの「apiKey」値です)。
    3.2 メッセージのテキストを入力し、 Enter キーを 2 回押して単一メッセージのみを送信します。
    : Enter キーを 2 回押すと、サンプル・アプリケーションが終了します。
    Protectec キューにメッセージを送信する alice を示す図
  4. bob のコマンド・シェルから、メッセージを受信するサンプル・プログラムを実行します。
    amqsgetc DEV.QUEUE.1.ALIAS <your Queue manager name>  
    
    4.1 パスワードの入力を求めるプロンプトが出されたら、 bob のアプリケーション API キーを入力します (これは、「applicationApiKeybob.json」ファイルの「apiKey」値です)。
    4.2. message <PDMQ> という、データが暗号化されたメッセージを受信します。このことから、メッセージが暗号化されて保管されており、無許可のユーザーには読み取れないようになっているということがわかります。 bob が別名キューからメッセージを受信していることを示すイメージ

結論

これで、このチュートリアルは完了です。 このガイドの中で、メッセージのエンドツーエンドのセキュリティーのためのアプリケーション AMS をセットアップしました。 アプリケーション AMS によってメッセージの保全性とメッセージのプライバシーが保護され、許可ユーザーのみがメッセージを読み取れるようになっていることが実証されました。

付録

付録 1: connection_info.txt

キュー・マネージャー接続の詳細を含む connection_info.txt ファイルを取得するには、次のようにします。

  1. 表に示されている関連サービスをクリックして、IBM クラウド・サービス・インスタンスにログインします
    サービス・インスタンスを示すイメージ
  2. これにより、「キュー・マネージャー」ビューが開きます。 接続情報の取得元となるキュー・マネージャーを選択します
    キュー・マネージャーのリストを示す図
  3. 「接続情報」 をクリックします。 キュー・マネージャー接続情報のイメージ
  4. このファイルを「JSON テキスト形式」でダウンロードします。

付録 2: platformApiKey.json

管理者 API キーを作成またはリセットするには、以下のようにします。

  1. 表に示されている関連サービスをクリックして、IBM クラウド・サービス・インスタンスにログインします
    サービス・インスタンスを示すイメージ

  2. これにより、「キュー・マネージャー」ビューが開きます。 接続情報の取得元となるキュー・マネージャーを選択します
    キュー・マネージャーのリストを示す図

  3. 次に、 「管理」 タブを選択します。
    キュー・マネージャーの「管理」タブが強調表示されている画像

  4. 次に、 **「リセット」 IBM Cloud API キー」**をクリックします。
    この MQ ユーザー名の以前の管理 API キーは、 無効になります

    管理 API キー・リセット・ボタンが強調表示されているイメージ

    ボタンに **「IBM Cloud API キーの作成」**と表示されている場合は、以前にこの方法で API キーが作成されていません。 **「IBM Cloud API キーの作成」**ボタンをクリックします。

  5. 「ダウンロード」 をクリックして、管理者ユーザー名と API キーを含む platformApiKey.json をダウンロードします。
    強調表示された管理者の新しい API キーの「ダウンロード」ボタンを示す画像

付録 3: IBM MQ C クライアント

IBM MQ Client コマンド・ライン・ツールおよびサンプル (runmqsc、amqsputc、amqsgetc) がない場合は、ここからダウンロードできます。

  1. 次に示す最新のパッケージを選択します。執筆時点での最新バージョンは 9.1.0 です
     IBM MQ クライアントのバージョンを示す図

  2. 次に示すように、パッケージの左側にあるボックスにチェック・マークを付けて、「IBM MQC redistributable client for <Your Operating System>」を選択します。 ファイル名には Redist が含まれているはずです。 このチュートリアルは、Linux Ubuntu オペレーティング・システムを使用して作成されました。 オペレーティング・システムと互換性のある再配布可能 MQ C クライアントの選択を示すイメージ

  3. HTTPS 経由でダウンロードすることを選択します。これにより、次のように、ブラウザーで直接クライアントをダウンロードできます。
    HTTPS が選択された多数のダウンロード・オプションを示すイメージ

    このオプションが表示されていない場合は、別のブラウザーで試してください。

  4. 「続行」をクリックすると、 次に示す画面にリダイレクトされます。 赤い円で示したシンボルをクリックして、ダウンロードを開始します。
    赤い円で示されているイメージをクリックします

  5. ダウンロードしたら、任意のディレクトリー <PATH_TO_MQCLIENT_DIR> にファイルを解凍します。

    • tar -xvzf <IBM-MQC-Redist>.tar.gz <PATH_TO_MQCLIENT_DIR>
  6. パスにコマンドを追加します。

    • export PATH=$PATH:<PATH_TO_MQCLIENT_DIR>/bin:<PATH_TO_MQCLIENT_DIR>/samp/bin