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 つのタイプがあります。
- メッセージ保全性ポリシー。このポリシーでは、メッセージにデジタル署名が適用されますが、メッセージの内容はプレーン・テキストのままとなります。
- メッセージ・プライバシー・ポリシー。このポリシーを使用する場合は、メッセージの内容も暗号化されます。 メッセージ・プライバシー・ポリシーには、メッセージの保全性も含まれます。
このポリシーでは、暗号化が指定されている場合は、許可されたすべての受信者も指定する必要があり、送信者はローカルの鍵ストアにそれらの受信者の公開鍵を保有している必要があります。
エンドツーエンド・メッセージ・セキュリティー
メッセージをエンドツーエンドで保護するためには、以下の点を考慮する必要があります。
- 転送中のメッセージが保護されること。
- 予期されるソースからメッセージが発信されているという保証。
- 意図された受信者のみがメッセージを表示できること。
- 転送中にメッセージが変更されていないという保証。
キュー・マネージャーそのものに暗号化メカニズムを組み込むと、アプリケーションを変更する労力を削減できますが、それで問題が完全に解決されるわけではありません。 キュー・マネージャーにはメッセージを暗号化して復号する機能があるため、受信者にとっては、受信したメッセージが本物であるという保証がありません。 例えば、B2B の場合、トポロジーはハブとスポークのトポロジーとなります。このトポロジーでは、クリアリングハウスがハブとして機能し、各スポークは異なるビジネス・パートナーになります。 改ざんのない本物のメッセージをあることを保証するこのようなシナリオでは、エンドツーエンドの保護が望ましい解決策になります。
アプリケーション AMS は、X.509 証明書の識別名で表される送信者 ID を暗号化してメッセージにバインドすることにより、エンドツーエンドのメッセージ・レベル・セキュリティーを提供します。 必要に応じて、X.509 証明書によっても識別されている特定の受信者用にメッセージを暗号化することもできます。 メッセージに送信者 ID と受信者 ID をバインドして改ざんを防止する機能を使用すると、メッセージを送信または受信できるユーザーに関するポリシーを簡単に作成でき、それらのポリシーの適用はメッセージごとに行われます。
このチュートリアルでは、送信側と受信側に自己署名証明書を使用します。 実動ユース・ケースでは CA 証明書を使用することを強くお勧めします。 自己署名証明書は、テストやデモの目的でのみ使用されます。
開始前に
- 既存の MQ on Cloud キュー・マネージャー。ない場合は、キュー・マネージャーを作成してください。
- キュー・マネージャーの接続の詳細については、*『付録 1』*を参照してください。
- 管理ユーザー名と API キーについては、*『付録 2』*を参照してください。
- IBM MQ Client。このチュートリアルでは runmqsc を使用します。インストール方法については、*『付録 3』*を参照してください。
メッセージの送信側と受信側のセットアップ
このチュートリアルでは、AMS をセットアップしてエンドツーエンド・メッセージ・セキュリティーを実例で示すために alice と bob という 2 人のユーザーを使用します。 alice はメッセージの送信者、bob はメッセージの受信者です。 実世界では、メッセージの送信側と受信側は異なるシステムで実行され、AMS を使用してメッセージの送信側と受信側の間でメッセージ保護を実施することにより、メッセージが改ざんのない本物であることが保証されます。
このチュートリアルでは、これらのユーザーを MQ on Cloud サービス上でユーザー資格情報 またはアプリケーション資格情報 として作成する必要があります。 このチュートリアルでは、アプリケーション資格情報を使用します。つまり、アプリケーションに許可を与えて、このアプリケーションがメッセージの書き込みのためにキュー・マネージャーにアクセスできるようにします。この許可のためにこのアプリケーションで使用するユーザー名は alice です。 同様に、メッセージを取得するためにキュー・マネージャーにアクセスする権限をアプリケーションに付与します。この許可に使用するユーザー名は bob です。
- IBM Cloud にログインします。
- IBM Cloud ダッシュボードで、「サービス」のリストから、望ましい mq on cloud キュー・マネージャーが使用可能であるサービス・インスタンスを見つけます。 サービス・インスタンスをクリックして開きます。
- これにより、「キュー・マネージャー」ビューが開きます。 **「アプリケーション資格情報」**タブを選択します。
- **「追加」**ボタンをクリックして、以下のイメージに示すようにフォームにユーザー alice に関する情報を入力します。
- フォームの**「表示名:」**フィールドに、値 alice を入力します。
- フォームの**「アプリケーション・ユーザー名:」**フィールドには、alice が自動的に取り込まれます。
- **「API キーの追加と生成 (Add and generate API key)」**をクリックします。
- ユーザーが追加されると、新しい apiKey が生成され、ポップアップ・ウィンドウに表示されます。 「ダウンロード」 をクリックして applicationApiKey.json をダウンロードし、ファイルを
"applicationApiKey<userName>.json
(例: "applicationApiKeyalice.json) として任意の場所に保存します。
- 次に、 「追加」 をクリックし、以下の図に示すように、ユーザー bobのフォームに入力します。
6.1 フォームの**「表示名:」フィールドに、値 bob を入力します。 6.2 フォームの「アプリケーション・ユーザー名:」**フィールドには、bob が自動的に取り込まれます。 6.2 **「API キーの追加と生成 (Add and generate API key)」**をクリックします。
- ユーザーが追加されると、新しい apiKey が生成され、ポップアップ・ウィンドウに表示されます。 「ダウンロード」 をクリックして applicationApiKey.json をダウンロードし、ファイルを
"applicationApiKey<username>.json
(例: "applicationApiKeybob.json) として任意の場所に保存します。
AMS を構成する前のメッセージの送受信
AMS 構成の最初のステップとして、alice と bob がメッセージを送受信できるか確認することができます。 そうすることにより、クライアントとキュー・マネージャーが通信してメッセージをやり取りできるかどうかを確認します。 このチュートリアルの以降のセクションでは、AMS のセットアップと構成について説明します。 ここでは、alice を送信側、bob を受信側として使用して、ターゲット・キューでプレーン・テキストのメッセージを送受信します。
-
2 つのコマンド・シェルを開きます。 1 つはユーザー alice 用で、もう 1 つはユーザー bob 用です。
- コマンド・シェルの 1 つを alice 用に使用し、ここで alice のすべてのステップを実行します。 これ以降、このコマンド・シェルを alice のコマンド・シェルと呼ぶことにします。
- もう 1 つのコマンド・シェルを bob 用に使用し、ここで bob のすべてのステップを実行します。 これ以降、このコマンド・シェルを bob のコマンド・シェルと呼ぶことにします。
- このチュートリアルでは、alice のコマンド・シェルと bob のコマンド・シェルが必要になります。 したがって、これらは、このチュートリアルのすべてのステップを完了するまで、閉じないでください。
-
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 を参照)。
- Linux/Mac の場合:
-
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 を参照)。
- Linux/Mac の場合:
-
alice のコマンド・シェルから、ターゲット・キューにメッセージを送信するサンプル・プログラムを実行します。
amqsputc DEV.QUEUE.1 <your Queue manager name>
- パスワードの入力を求めるプロンプトが出されたら、alice のアプリケーション API キーを入力します (これは "applicationApiKeyalice.json ファイル内の「apiKey」値です)。
- メッセージのテキストを入力し、
Enter
キーを 2 回押すと、単一のメッセージのみが送信されます。
Enter
キーを 2 回押すと、サンプル・アプリケーションが終了します。 -
次は、ユーザー bob がターゲット・キューからメッセージを取得できるかを確認します。
- bob のコマンド・シェルから、メッセージを受信するためのサンプル・プログラムを実行します。
amqsgetc DEV.QUEUE.1 <your Queue manager name>
- パスワードの入力を求めるプロンプトが出されたら、bob のアプリケーション API キーを入力します (これは "applicationApiKeybob.json ファイルの「apiKey」値です)。
- 受信したメッセージが表示されます。
message <Hello>
は、ユーザー bob がターゲット・キューからメッセージを読み取ることができることを確認します。
- メッセージはプレーン・テキストでターゲット・キューに保管されているので、キューの読み取り時にメッセージがプレーン・テキストで返されることに注意してください。
- bob のコマンド・シェルから、メッセージを受信するためのサンプル・プログラムを実行します。
このテストによって、alice と bob がターゲット・キューでメッセージを送受信できることが確認されました。 次のステップは、エンドツーエンド・セキュリティーのために AMS に必要な構成の作成です。 これには、メッセージの署名と暗号化を実施するために、これらのユーザーの鍵ストアと証明書を作成することが含まれます。
alice および bob の鍵ストアのセットアップ
アプリケーション AMS は、標準の X.509 証明書に保管された鍵を使用する公開鍵/秘密鍵暗号化に基づいており、これらの証明書はプラットフォームに適した鍵ストアに保管されます。 これらの証明書は、MQ Secure Sockets Layer (SSL) および Transport Layer Security (TLS) の暗号化に使用されるものと同じタイプの証明書であり、希望する場合は実際に、アプリケーションで同じ証明書と鍵ストアをこれらの両方の暗号化のために使用することも可能です。 このチュートリアルでは、ユーザー alice および bob の新しい鍵ストアと証明書を作成します。
alice のコマンド・シェルで alice のすべてのステップを実行し、bob のコマンド・シェルで bob のすべてのステップを実行する必要があります。
- 鍵ストアをセットアップするためのディレクトリーの作成
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
- 鍵データベースの作成
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
- 鍵データベースが読み取り可能であることの確認 (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
- ユーザー 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
- ユーザー 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 ポリシーを設定する必要があります。
-
新しいコマンド・シェルを開きます
-
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」です。
-
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 に指示します
-
端末からパスワードを入力するよう求められます。
これは platformApiKey.json ファイル内の「apiKey」値です (このチュートリアルの最後にある付録 2 を参照)。 -
端末は入力待ちになります。
-
ターゲット・キューに対して新しい 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 ポリシーを検証します。セットアップに応じた署名および暗号化を使用してポリシーが正しく定義および構成されていることを確認するには、以下のコマンドを使用します。
DISPLAY POLICY(DEV.QUEUE.1)
メッセージ暗号化を検証するための別名キューの作成
ここでは、メッセージがキューに保管されるときに暗号化されることを実証するために、別名キューを使用します。 別名キューを介してメッセージを取得すると、ターゲット・キュー上でインターセプターがトリガーされず、メッセージが復号されることなくそのまま取得されるので、メッセージがプレーン・テキストであるか暗号化されているかを正確に把握できます。
-
キューをターゲットとする別名キューを作成する
DEFINE QALIAS (DEV.QUEUE.1.ALIAS) TARGET (DEV.QUEUE.1)
- DEV.QUEUE.1.ALIAS は、別名キューの名前です
- DEV.QUEUE.1 は、このチュートリアルで使用するターゲット・キューです
alice および bob の keystore.conf ファイルの作成
AMS インターセプターは、鍵ストアの場所と使用する証明書のラベルの詳細が含まれている、ユーザー (このチュートリアルでは、alice および bob) の構成ファイルを予期します。 AMS は、メッセージの署名と暗号化、およびエンドツーエンド保護の ID 検査のためにそれらを必要とします。 AMS は、構成ファイルの名前が " keystore.conf" であり、プレーン・テキスト形式の詳細が含まれていることを予期します。 それぞれのユーザーに、別個の keystore.conf ファイルが必要です。
このセクションでは、alice および bob の keystore.conf ファイルを作成する方法を説明します。
-
ユーザー 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:) に置き換えます。
-
ユーザー 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 は、ターゲット・キューに設定された保護ポリシーに基づいて、メッセージがキューに入れられる前からメッセージを暗号化して、その内容が公開されないようにします。
エンドツーエンド・メッセージ・セキュリティーを実証するには、メッセージの保全性とメッセージのプライバシーを実証する必要があります。 ここでは、まずメッセージの保全性の実証から始めることにします。メッセージの保全性がある状態とは、無許可ユーザーに、保護キューへのアクセスが許可されていない状態です。 その後、許可ユーザー (この例では alice と bob) が保護キューでメッセージを送受信できるかどうかを確認します。 最後に、保護キューに保存中のメッセージが暗号化されていて読み取り不可能であることを実証します。
メッセージ保全性の検査
メッセージの保全性が保護されていることが実証されるためには、署名または暗号化のポリシーに従わずに保護キューにアクセスしようとする試みがすべて失敗しなければなりません。 これをテストするために、環境変数 MQS_KEYSTORE_CONF を設定せずに送信側プログラムを実行してみることができます。 そのようにすると、AMS は署名に使用する鍵ストアと証明書を検出できなくなります。
alice はキュー・マネージャーとの接続を確立することができますが、保護キューを開こうとすると失敗します。なぜなら、このポイントは、AMS インターセプターがユーザー alice の ID を検査するポイントだからです。
-
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」です。
-
サンプル・プログラムを実行して、メッセージを受信します。
amqsputc DEV.QUEUE.1 <your Queue manager name>
- パスワードの入力を求めるプロンプトが出されたら、alice のアプリケーション API キーを入力します (これはファイル "applicationApiKeyalice.json の「"applicationApiKey」値です)。
次のイメージは、alice が保護キューをオープンしようとして MQRC_NOT_AUTHORIZED で失敗したことを示しています。
メッセージ・セキュリティー検査 - ユーザーが保護キューにあるメッセージを送受信することを許可します。
alice と bob には必要な構成があり、ターゲット・キューに定義されている保護ポリシーに完全に準拠しています。 したがって、alice と bob は、保護キューの許可されたメッセージ送信者とメッセージ受信者であることになります。 ここでは、これを実証するために、alice のユーザー ID を使用して送信側プログラム (amqsputc) を実行し、保護キューにメッセージを送信します。 その後、bob のユーザー ID を使用して受信側プログラム (amqsgetc) を実行し、メッセージを受信します。
- 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」です。
- 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」です。
- alice コマンド・シェルからサンプル・プログラムを実行して、保護キューにメッセージを送信します。
3.1 パスワードの入力を求めるプロンプトが出されたら、 alice のアプリケーション API キーを入力します (これは、「applicationApiKeyalice.json」ファイルの「apiKey」値です)。amqsputc DEV.QUEUE.1 <your Queue manager name>
3.2 メッセージのテキストを入力し、Enter
キーを 2 回押して単一メッセージのみを送信します。
注:Enter
キーを 2 回押すと、サンプル・アプリケーションが終了します。
- bob のコマンド・シェルから、メッセージを受信するためのサンプル・プログラムを実行します。
4.1 パスワードの入力を求めるプロンプトが出されたら、 bob のアプリケーション API キーを入力します (これは、「applicationApiKeybob.json」ファイルの「apiKey」値です)。amqsgetc DEV.QUEUE.1 <your Queue manager name>
4.2. 受信したメッセージがmessage <Hello>
「bob がメッセージ・データを読み取れることを確認します。」 と表示されます。
メッセージ・プライバシー検査 - データが暗号化されて保管されているかどうかを検査します。
メッセージが暗号化されていることを実証するために、別名キューを使用してテストを行います。 別名キューを介してメッセージを取得すると、ターゲット・キュー上のインターセプターがトリガーされず、メッセージは復号されずにそのまま取得されるため、メッセージがプレーン・テキストであるか暗号化されているかを正確に把握できます。 ここでは、これを実証するために、alice のユーザー ID を使用して送信側プログラム (amqsputc) を実行し、保護キューにメッセージを送信します。 その後、bob のユーザー ID を使用して受信側プログラム (amqsgetc) を実行し、別名キューからメッセージを受信します。
- 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」です。
- 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」です。
- alice コマンド・シェルからサンプル・プログラムを実行して、保護キューにメッセージを送信します。
3.1 パスワードの入力を求めるプロンプトが出されたら、 alice のアプリケーション API キーを入力します (これは、「applicationApiKeyalice.json」ファイルの「apiKey」値です)。amqsputc DEV.QUEUE.1 <your Queue manager name>
3.2 メッセージのテキストを入力し、Enter
キーを 2 回押して単一メッセージのみを送信します。
注:Enter
キーを 2 回押すと、サンプル・アプリケーションが終了します。
- bob のコマンド・シェルから、メッセージを受信するサンプル・プログラムを実行します。
4.1 パスワードの入力を求めるプロンプトが出されたら、 bob のアプリケーション API キーを入力します (これは、「applicationApiKeybob.json」ファイルの「apiKey」値です)。amqsgetc DEV.QUEUE.1.ALIAS <your Queue manager name>
4.2.message <PDMQ>
という、データが暗号化されたメッセージを受信します。このことから、メッセージが暗号化されて保管されており、無許可のユーザーには読み取れないようになっているということがわかります。
結論
これで、このチュートリアルは完了です。 このガイドの中で、メッセージのエンドツーエンドのセキュリティーのためのアプリケーション AMS をセットアップしました。 アプリケーション AMS によってメッセージの保全性とメッセージのプライバシーが保護され、許可ユーザーのみがメッセージを読み取れるようになっていることが実証されました。
付録
付録 1: connection_info.txt
キュー・マネージャー接続の詳細を含む connection_info.txt ファイルを取得するには、次のようにします。
- 表に示されている関連サービスをクリックして、IBM クラウド・サービス・インスタンスにログインします
- これにより、「キュー・マネージャー」ビューが開きます。 接続情報の取得元となるキュー・マネージャーを選択します
- 「接続情報」 をクリックします。
- このファイルを「JSON テキスト形式」でダウンロードします。
付録 2: platformApiKey.json
管理者 API キーを作成またはリセットするには、以下のようにします。
-
表に示されている関連サービスをクリックして、IBM クラウド・サービス・インスタンスにログインします
-
これにより、「キュー・マネージャー」ビューが開きます。 接続情報の取得元となるキュー・マネージャーを選択します
-
次に、 「管理」 タブを選択します。
-
次に、 **「リセット」 IBM Cloud API キー」**をクリックします。
この MQ ユーザー名の以前の管理 API キーは、 無効になります。ボタンに **「IBM Cloud API キーの作成」**と表示されている場合は、以前にこの方法で API キーが作成されていません。 **「IBM Cloud API キーの作成」**ボタンをクリックします。
-
「ダウンロード」 をクリックして、管理者ユーザー名と API キーを含む platformApiKey.json をダウンロードします。
付録 3: IBM MQ C クライアント
IBM MQ Client コマンド・ライン・ツールおよびサンプル (runmqsc、amqsputc、amqsgetc) がない場合は、ここからダウンロードできます。
-
次に示す最新のパッケージを選択します。執筆時点での最新バージョンは 9.1.0 です
-
次に示すように、パッケージの左側にあるボックスにチェック・マークを付けて、「
IBM MQC redistributable client for <Your Operating System>
」を選択します。 ファイル名には Redist が含まれているはずです。 このチュートリアルは、Linux Ubuntu オペレーティング・システムを使用して作成されました。 -
HTTPS 経由でダウンロードすることを選択します。これにより、次のように、ブラウザーで直接クライアントをダウンロードできます。
このオプションが表示されていない場合は、別のブラウザーで試してください。
-
「続行」をクリックすると、 次に示す画面にリダイレクトされます。 赤い円で示したシンボルをクリックして、ダウンロードを開始します。
-
ダウンロードしたら、任意のディレクトリー
<PATH_TO_MQCLIENT_DIR>
にファイルを解凍します。tar -xvzf <IBM-MQC-Redist>.tar.gz <PATH_TO_MQCLIENT_DIR>
-
パスにコマンドを追加します。
export PATH=$PATH:<PATH_TO_MQCLIENT_DIR>/bin:<PATH_TO_MQCLIENT_DIR>/samp/bin