English

実践習得 IBM MQの基本

SSL/TLSの構成(3)クライアント接続

※本連載は最新のmqpgf/mqpcfに基づいて改定されることがあります。 常に最新バージョンをダウンロードしてご使用ください。

これまで数回に渡って、サーバー間接続でのSSL/TLSのセットアップについてご紹介しましたが、次に、クライアント接続でのSSL/TLSの使用方法についてご紹介します。
クライアント接続でSSL/TLSを利用する場合も、自己署名証明書での運用や、片方向認証(匿名接続)が可能ですが、ここではCA署名証明書を使用した相互認証を例としてご説明します。
SSL/TLSを使用したクライアント接続は、クライアント接続用のチャネルを作成するだけで、これまでにサーバー接続で作成したプライベートCAやキー・リポジトリなど全てそのまま使用できます。 MQクライアントにもGSKitがバンドルされており、キー・リポジトリの作成手順も基本的に同じです。 HPE NonStopの場合は、単体のMQクライアントは存在せず、MQサーバーをインストールした上でMQクライアントの機能を使用しますが、SSL/TLS関連ファイルの作成方法はやはり基本的に同じです。 ただし、MQ5.3.1 for HPE NonStopにはMQクライアントの機能はありませんので、MQ8を使用することが必要です。
ここでは、MQクライアントのみをWindowsマシンにインストールした場合を例としてご説明しますが、Linuxでの手順も同様です。 MQクライアント(Windows)マシン上、およびサーバー上のプライベートCA、サーバー上の証明書セットアップは、サーバー間接続で作成したものをそのまま使用しますので、それらの作成についての手順は、前回までのサーバー間接続の説明を参照してください。 また、クライアント側のキー・リポジトリの作成手順もサーバー間接続での手順と同じまたは類似していますので、詳しい説明を省略している場合があります。 そちらも、必要に応じて、前回までのサーバー間接続でのSSL/TLSのセットアップの説明も参照してください。
尚、これ以降、SSL/TLSを使用しない基本的なMQクライアント接続の構成を自力でセットアップできることを前提にしていますので、その部分に不安がある場合はこれより以前の連載を参考にしてセットアップしてください。


クライアントでのSSL/TLSのセットアップ(CSRの作成まで)(GSKit)

※この部分のサーバー側での手順は、サーバー間接続でのSSL/TLSのセットアップと同様ですので、「各サーバーでのSSL/TLSのセットアップ(CSRの作成まで)(GSKit)」を参照してくだい。 MQ8 for HPE NonStopの場合は、単体でのMQクライアントのインストールはなく、MQサーバーにバンドルされているMQクライアントを使用します。 その為、クライアント側、サーバー側共、「各サーバーでのSSL/TLSのセットアップ(CSRの作成まで)(Openssl)」を参照してセットアップしてください。

MQ Client for Multiplatforms でもSSL/TLSのライブラリは、バンドルされている GSKit(IBM Global Security Kit) を使用します。
これ以降の手順は、下記のMQクライアントのバージョンで検証しています。 Linuxの例は示しませんが、基本的にWindowsと同様です。

Windows 9.2.1.0


SSL/TLSセットアップで使用するGSKitコマンド

MQクライアントでも、MQサーバーと同様に strmqikm(iKeyman)、runmqckm(iKeycmd)、runmqakm(GSKCapiCmd) コマンドが使用できます。 それぞれのコマンドの詳細については、「SSL/TLSセットアップで使用するGSKitコマンド」をご参照ください。

以降の手順では、サーバー間接続のセットアップと同様、基本的に runmqckm コマンドを使用し、証明書要求の作成時にのみ runmqakm を使用します。


各クライアント・マシンで鍵リポジトリーを準備(Windows, Linux)

各マシンのログイン環境にMQ環境がセットアップされていない場合、MQ環境をセットアップします。

※Windowsの場合 > cd /bin > setmqenv -s > dspmqver Name: IBM MQ Version: 9.2.1.0 ...

※setmqenvに-sを指定すると、複数のMQインストールの内、実行したsetmqenvと同一のインストールの環境が設定されます。

runmqckm コマンドを使用して鍵リポジトリを作成します。 IBM MQ クライアントの場合は、デフォルトのキーリポジトリの配置場所はありませんので、任意の場所に作成してください。 アプリケーションにキーリポジトリを参照させる方法は後程ご説明します。

リポジトリの配置場所を決めて移動し、runmqckmコマンドを使用してキー・リポジトリを作成します。
※下記は Windows の例ですが Linux も同様です。

>※Windowsの場合 >cd ...\clientssl >runmqckm -keydb -create -db key.kdb -pw PL921WCpass -type cms -stash 5724-H72 (C) Copyright IBM Corp. 1994, 2020.

*オプションの説明
-keydb: コマンドの対象は鍵データベース
-create: 鍵データベースを作成
-db filename: CMS 鍵データベースの完全修飾ファイル名を指定。 ファイル拡張子は .kdb である必要があります。
-pw password: CMS 鍵データベースのパスワードを指定します。
-type cms: 鍵データベースのタイプを指定します。 IBM MQ の場合は必ず cms(Certificate Management System) を指定します。
-stash: 鍵データベース・パスワードをファイルに保存する。

下記3つのファイルが作成されます。

>dir ... 2021/08/18 10:51 88 key.kdb 2021/08/18 10:51 80 key.rdb 2021/08/18 10:51 193 key.sth ...

これらのファイルについての概略の説明はサーバー間接続でのSSL/TLSのセットアップの説明を参照してください。


クライアント接続でのCERTLABLの使用について

MQクライアント接続でも、CERTLABLは使用できます。 MQは、CERTLABL 属性が設定されている場合はその値、またはデフォルトの ibmwebspheremq にキュー・マネージャーの名前、もしくはクライアント・ユーザーのログオンIDをすべて小文字で付加した値のいずれかを使用します。 以降、CERTLABLを使用する場合を例に手順を示します。


証明書の署名リクエスト(CSR)を作成(Windows, Linux)

CSR(Certificate Signing Request)は、CAに対してのサーバ証明書への署名リクエストです。 CSRの作成時、鍵のサイズに2048を使用する場合は runmqckm ではなく runmqakm を使用します。 その際、-fipsは指定しません。
※下記は Windows の例ですが Linux も同様で、一行で指定します。 DNには各サーバー毎の内容を指定します。

...\clientssl>runmqakm -certreq -create -db key.kdb -pw PL921WCpass -label PL921WCA -dn "CN=www.pulsarintegration.PL921WC.com,O=Pulsar Integration PL921WC Inc.,S=Chiba,C=JP" -size 2048 -file key.csr -sig_alg sha256 5724-H72 (C) Copyright IBM Corp. 1994, 2020.

*オプションの説明
-certreq: コマンドの対象は証明書要求
-create: 証明書要求を作成
-db filename: CMS 鍵データベースの完全修飾ファイル名を指定します。
-pw password: CMS 鍵データベースのパスワードを指定します。
-label label: 証明書に付加する鍵ラベルを指定します。 ラベルは CERTLABL 属性が設定されている場合はその値、たはデフォルトの ibmwebspheremq にキュー・マネージャーの名前、もしくはクライアント・ユーザーのログオンIDをすべて小文字で付加した値のいずれか。
-dn: distinguished_name: 二重引用符で囲んだ X.500 識別名を指定します。 少なくとも 1 つの属性が必要。
-size key_size: 鍵のサイズを指定します。
-file filename: 認証要求のファイル名を指定します。
-sig_alg hashalgorithm: 認証要求の作成中に使用されるハッシュ・アルゴリズムを指定します。 このハッシュ・アルゴリズムは、新たに作成された証明書要求に関連付けられた署名を作成するために使用されます。

拡張子が".csr"のファイルが作成されます。

>dir ... 2021/08/18 13:42 1,046 key.csr 2021/08/18 10:51 88 key.kdb 2021/08/18 13:42 5,080 key.rdb 2021/08/18 10:51 193 key.sth

証明書要求が想定通りに作成されているか確認します。

...\clientssl>runmqckm -certreq -details -label PL921WCA -db key.kdb ... A password is required to access the source key database. Please enter a password: PL921WCpass Label: PL921WCA Key Size:2048 Subject: CN=www.pulsarintegration.PL921WC.com, O=Pulsar Integration PL921WC Inc., ST=Chiba, C=JP Fingerprint: 0D:59:74:D8:40:15:F1:A9:F1:5C:21:DE:38:F5:34:56 Signature Algorithm: SHA256withRSA (1.2.840.113549.1.1.11)

*オプションの説明
-certreq: コマンドの対象は証明書要求
-detail: 特定の証明書要求の詳細を表示
-label label: 参照する証明書要求に付加した鍵ラベル
-db filename: CMS 鍵データベースの完全修飾ファイル名を指定します。


作成した証明書要求(CSR)より認証局(CA)にて証明書の発行

この手順は、サーバー間接続時と同様ですので、「作成した証明書要求(CSR)より認証局(CA)にて証明書の発行」の説明もご参照ください。

>cd ...\openssl\winca >set PATH=%PATH%;C:\Program Files\OpenSSL-Win64\bin >set OPENSSL_CONF=...\openssl\winca\openssl.cnf >openssl ca -in ..\..\clientssl\key.csr Using configuration from ...\openssl\winca\openssl.cnf Enter pass phrase for .../openssl/winca/private/cakey.pem: winca Check that the request matches the signature Signature ok Certificate Details: Serial Number: 2 (0x2) Validity Not Before: Aug 18 06:28:07 2021 GMT Not After : Aug 16 06:28:07 2031 GMT Subject: countryName = JP stateOrProvinceName = Chiba organizationName = Pulsar Integration PL921WC Inc. commonName = www.pulsarintegration.PL921WC.com X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 7D:E2:7B:D2:AC:62:DA:EC:43:2B:85:63:82:89:F0:98:D6:92:D7:5C X509v3 Authority Key Identifier: keyid:23:0B:5D:88:01:02:F5:6E:2B:F7:67:3D:67:A3:EF:AB:72:8D:43:A2 Certificate is to be certified until Aug 16 06:28:07 2031 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Certificate: Data: Version: 3 (0x2) Serial Number: 2 (0x2) Signature Algorithm: sha256WithRSAEncryption Issuer: C=JP, ST=Chiba, O=Pulsar Integration Inc., CN=www.pulsarintegration.com/ emailAddress=support@pulsarintegration.com Validity Not Before: Aug 18 06:28:07 2021 GMT Not After : Aug 16 06:28:07 2031 GMT Subject: C=JP, ST=Chiba, O=Pulsar Integration PL921WC Inc., CN=www.pulsarintegration.PL921WC.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (2048 bit) Modulus: 00:ad:4e:4d:cc:35:25:c0:8b:50:54:9c:b9:e6:7b: .... Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 7D:E2:7B:D2:AC:62:DA:EC:43:2B:85:63:82:89:F0:98:D6:92:D7:5C X509v3 Authority Key Identifier: keyid:23:0B:5D:88:01:02:F5:6E:2B:F7:67:3D:67:A3:EF:AB:72:8D:43:A2 Signature Algorithm: sha256WithRSAEncryption 36:78:a6:58:ea:51:94:4c:7f:71:46:33:5e:c8:14:d6:66:b1: .... -----BEGIN CERTIFICATE----- MIID+zCCAuOgAwIBAgIBAjANBgkqhkiG9w0BAQsFADCBkTELMAkGA1UEBhMCSlAx .... adZngxtUb+U8XKBjCHEYXTNA/V96RK9kq260F RX0qLU69C6pBXa268cmq -----END CERTIFICATE----- Data Base Updated

*オプションの説明
ca: CAの基本的な機能、X.509証明書や証明書失効リストの発行を行う。
-in <filename>: 証明書要求(CSR)ファイルを指定。

winca\newcertsディレクトリに証明書のシリアル番号のPEMファイルが作成されます。 index.txtファイルには発行した証明書の情報が追加され、serialファイル内のシリアル番号がインクリメントされます。

...\openssl\winca>dir newcerts .... 2021/08/04 15:44 4,721 01.pem 2021/08/18 15:28 4,728 02.pem .... >type index.txt V 310802064352Z 01 unknown /C=JP/ST=Chiba/O=Pulsar Integration PL92WA Inc./CN=www.pulsarintegration.PL92W.com V 310816062807Z 02 unknown /C=JP/ST=Chiba/O=Pulsar Integration PL921WC Inc./CN=www.pulsarintegration.PL921WC.com >type serial 03


証明書の検証

下記を参考に証明書を検証してください。 詳細は「証明書の検証」を参照してください。


秘密鍵、公開鍵の対称性チェック

GSKitの場合は公開鍵のチェックのみです。 hash値を比較し、同一であることを確認します。

※CA署名証明書(サーバー証明書) >openssl x509 -in newcerts\02.pem -modulus -noout | openssl md5 (stdin)= 2fd21828f14c785cb1350c141a6689b3 ※証明書要求(CSR) >openssl req -in ..\..\clientssl\key.csr -modulus -noout | openssl md5 (stdin)= 2fd21828f14c785cb1350c141a6689b3

*オプションの説明
x509: X.509証明書の作成、確認、その他さまざまな操作を行う。
req: このコマンドを使用して、証明書要求の作成、確認、操作を行う。
-in <filename>: 読み込むファイル名。
-modulus: 公開鍵の法(モジュロ)を出力。
-noout: 証明書の符号化された形式での出力を抑制する。
md5: md5を使用してメッセージダイジェスト(ハッシュ値)を生成。


CA署名証明書とCA証明書のsubjectおよびissuerチェック

CA署名証明書(サーバー証明書)とCA(root)証明書の内容チェック(subjectおよびissuer)。 issuer は証明書の発行者で、両方共同じCAのDistinguished Nameになります。

※CA署名証明書(サーバー証明書) >openssl x509 -subject -issuer -noout -in newcerts\02.pem subject=C = JP, ST = Chiba, O = Pulsar Integration PL921WC Inc., CN = www.pulsarintegration.PL921WC.com issuer=C = JP, ST = Chiba, O = Pulsar Integration Inc., CN = www.pulsarintegration.com, emailAddress = support@pulsarintegration.com ※CA(root)証明書 >openssl x509 -subject -issuer -noout -in cacert.pem subject=C = JP, ST = Chiba, O = Pulsar Integration Inc., CN = www.pulsarintegration.com, emailAddress = support@pulsarintegration.com issuer=C = JP, ST = Chiba, O = Pulsar Integration Inc., CN = www.pulsarintegration.com, emailAddress = support@pulsarintegration.com

*オプションの説明
x509: X.509証明書の作成、確認、その他さまざまな操作を行う。
-subject: 証明書の所有者名を出力する。
-issuer: 証明書の発行者を出力する。
-in <filename>: 読み込むファイル名。
-noout: 証明書の符号化された形式での出力を抑制する。


中間CA証明書またはルート証明書とサーバ証明書のベリファイ

>openssl verify -CAfile cacert.pem newcerts\02.pem newcerts\02.pem: OK ※OKと表示されること

*オプションの説明
verify: X.509証明書の有効性の検証行う。 証明書チェーンの各証明書に対する検証を含む、証明書に対しての包括的なチェックが行われる。
-CAfile <filename1>: 信頼されている証明書ファイルの名前を指定する。
<filename2>: 検証するCA署名証明書のファイル名を指定する。


サーバー証明書の内容確認

有効期限その他、サーバー証明書の内容が想定通りかを確認する。

openssl x509 -noout -text -in newcerts\02.pem

*オプションの説明
x509: X.509証明書の作成、確認、その他さまざまな操作を行う。
-noout: 証明書の符号化された形式での出力を抑制する。
-text: 証明書を可読性のある形式で表示する。
-in <filename>: 読み込むファイル名。


CA(root)証明書をクライアントの鍵リポジトリーに追加する(GSKit)

この手順も、サーバー間接続時と同様ですので、「CA(root)証明書を鍵リポジトリーに追加する(GSKit)」の説明もご参照ください。

クライアントのリポジトリの配置場所へ移動し、root証明書をリポジトリの配置場所にコピーします。
※送受信する双方のチャネルで使用する証明書が異なるCAで署名されている場合、サーバー側にも両方のCA証明書を追加しておくことが必要です。

>cd ...\clientssl ※クライアント(Windows)のCA証明書を追加 >runmqckm -cert -add -db key.kdb -pw PL921WCpass -label PLWCA -file cacert_win.pem -format ascii 5724-H72 (C) Copyright IBM Corp. 1994, 2020. ※サーバーのCA証明書を追加 >runmqckm -cert -add -db key.kdb -pw PL921WCpass -label PLNCA -file cacert_ns.pem -format ascii 5724-H72 (C) Copyright IBM Corp. 1994, 2020. >

*オプションの説明
-cert: コマンドの対象は証明書
-add: CA証明書を追加
-db filename: CMS 鍵データベースの完全修飾ファイル名を指定。
-pw password: CMS 鍵データベースのパスワードを指定。
-label labelname: 証明書に付加するラベル名。
-file filename: 証明書ファイルの名前。
-format ascii: 証明書の形式。 Base64 エンコードの ASCII を指定。

格納されている証明書を一覧表示します。

...\clientssl>runmqckm -cert -list -db key.kdb -pw PL921WCpass 5724-H72 (C) Copyright IBM Corp. 1994, 2020. Certificates in database ...\clientssl\key.kdb: PLNCA PLWCA >

*オプションの説明
-cert: コマンドの対象は証明書
-list: 鍵データベース内の証明書をリスト
-db filename: CMS 鍵データベースの完全修飾ファイル名を指定。
-pw password: CMS 鍵データベースのパスワードを指定。

格納されている各証明書の詳細をそれぞれ表示させます。

>runmqckm -cert -details -label PLWCA -db key.kdb -pw PL921WCpass
>runmqckm -cert -details -label PLNCA -db key.kdb -pw PL921WCpass

*オプションの説明
-cert: コマンドの対象は証明書
-details: 特定の証明書の詳細を表示
-label labelname: 証明書のラベル名。
-db filename: CMS 鍵データベースの完全修飾ファイル名を指定。
-pw password: CMS 鍵データベースのパスワードを指定。


個人証明書をクライアントの鍵リポジトリーに受信する(GSKit)

この手順も、サーバー間接続時と同様ですので、「個人証明書を鍵リポジトリーに受信する(GSKit)」の説明もご参照ください。

CA署名証明書(個人証明書)をクライアントの鍵リポジトリーに追加します。 個人証明書のインポートは、必ずCSRを作成したキーリポジトリーであることが必要です。

runmqckmコマンドを使用して個人証明書を追加します。

>cd ...\clientssl >copy ..\openssl\winca\newcerts\02.pem PL921WCA.pem >runmqckm -cert -receive -file PL921WCA.pem -db key.kdb -pw PL921WCpass -format ascii 5724-H72 (C) Copyright IBM Corp. 1994, 2020. Validation successful. >

*オプションの説明
-cert: コマンドの対象は証明書
-receive: 証明書を受信
-file filename: 証明書ファイルの名前。
-db filename: CMS 鍵データベースの完全修飾ファイル名を指定。
-pw password: CMS 鍵データベースのパスワードを指定。
-format ascii: 証明書の形式。 Base64 エンコードの ASCII を指定。

鍵リポジトリー上で追加したCA署名証明書を確認します。

runmqckm -cert -list -db key.kdb -pw PL921WCpass
runmqckm -cert -details -label PL921WCA -db key.kdb -pw PL921WCpass


fig 12.1


TLSによるクライアント接続の確認(CCDT)

クライアント接続でSSL/TLSを使用する場合、MQSERVER環境変数やmqclient.iniにチャネル情報を設定する方法は使用できません。 チャネル定義テーブル(CCDT)を作成するか、MQCONNX 呼び出しで チャネル定義構造体 MQCD を使用することが必要です。 まず、チャネル定義テーブル(CCDT)を使用して、SSL/TLSを使用したクライアント接続の構成をテストしてみます。 CERTLABL/SNIを使用することを前提としていますので、「TLS」のCipherSpecを指定することが必要です。 例として、TLS_AES_128_GCM_SHA256 を使用します。 TLSチャネルの定義は CipherSpecをチャネル・プロパティのsslciphに、証明書ラベルを certlabl に指定(必要な場合)するだけです。 CipherSpecはクライアント接続チャネル(CLNTCONN)、サーバー接続チャネル(SVRCONN)で同じものを指定します。 キューマネージャー間接続で必要だった、キューマネージャー・プロパティのCERTLABLによるデフォルトのラベルの考慮は必要ありません。
※SSL/TLSを構成する前に、通常のクライアント接続で接続確認を済ませておくことをお勧めします。


サーバー側TLS接続定義の作成

サーバー側に下記コマンドでサーバー接続チャネル(SVRCONN)を作成します。 この例では、CERTLABLはサーバー間接続で使用したラベルと同じものを使用しています。

$ mqpcf mqsc -qm PL81N -s "def chl(PL81N.MQICHL) chltype(svrconn) certlabl(PL81NA) SSLCIPH(TLS_AES_128_GCM_SHA256)"


クライアント側TLS接続定義の作成

Windowsの場合は、コマンドプロンプトを”管理者として実行”し、runmqsc を "-n"をオプションを指定して起動します。 複数インストールが存在する場合は、setmqenvで利用するMQバージョンの環境をセットアップしてから実行してください。

※"C:\Program Files\IBM\MQ_1"にインストールされているMQバージョンの環境をセットアップする場合。 >"C:\Program Files\IBM\MQ_1\bin\setmqenv" -s >runmqsc -n 5724-H72 (C) Copyright IBM Corp. 1994, 2020. Starting local MQSC for 'AMQCLCHL.TAB'. MQSC > def chl(PL81N.MQICHL) chltype(clntconn) QMNAME(PL81N) certlabl(PL921WCA) SSLCIPH(TLS_AES_128_GCM_SHA256) CONNAME('xxx.xxx.xxx.xxx(xxxx)') 1 : def chl(PL81N.MQICHL) chltype(clntconn) QMNAME(PL81N) certlabl(PL921WCA) SSLCIPH(TLS_AES_128_GCM_SHA256) CONNAME('xxx.xxx.xxx.xxx(xxxx)') AMQ8014I: IBM MQ channel created.

デフォルトでは、"C:\ProgramData\IBM\MQ"のAMQCLCHL.TABにチャネル定義が作成されます。 上書きを防止する為にデフォルト以外の場所にコピーしても構いません。

>dir C:\ProgramData\IBM\MQ\AMQCLCHL.TAB .... 2021/08/19 11:26 2,106 AMQCLCHL.TAB .... >copy C:\ProgramData\IBM\MQ\AMQCLCHL.TAB ....\clientssl

クライアント接続の場合、キー・リポジトリの場所(絶対パスとキー・リポジトリ・ファイルの拡張子を除いた部分(デフォルトは"key"))を環境変数 MQSSLKEYR に指定することが必要です
CCDTの参照の為に、環境変数 MQCHLLIB にCCDTファイルのパスを指定します。 CCDTファイルがデフォルトのファイル名 AMQCLCHL.TAB 以外の場合は、そのファイル名を環境変数 MQCHLTAB に設定します。

※MQSERVERが設定されている場合は、優先的に参照されるので、削除しておきます。 >set MQSERVER= >set MQSSLKEYR=C:\...\clientssl\key >set MQCHLLIB=C:\...\clientssl

※キーリポジトリの場所は、-krオプションを使用して指定することも可能です。その場合、MQCNO_VERSION_4を同時に指定することが必要です。
※環境変数 MQSSLKEYR を使用する場合は通常 MQCNO_VERSION_4 の指定は必要ありませんが、Linux 9.2.4.0を使用してテストをしていたところ、何故かMQCNO_VERSION_4 を指定する必要がありました。


Ex. 12.1.1 SSL/TLSを使用したクライアント接続の実施(CCDT)

下記コマンドをクライアントで実行し、TLSによるクライアント接続状態を維持します。
キューは予め定義しておいてください。

>mqpgfc -qm PL81N -q LQ1 -r MQGMO_WAIT MQWI_UNLIMITED

*オプションの説明
MQGMO_WAIT: MQGMO.OptionsにMQGMO_WAITを設定します。
MQWI_UNLIMITED: MQGMO.WaitIntervalにMQWI_UNLIMITEDを設定します。

下記コマンドをサーバー側で実行し、TLSによるクライアント接続状況を確認します。

$ mqpcf chs -qm PL81N -c PL81N.MQICHL SECPROT SSLCERTI SSLCIPH SSLPEER
1: CHANNEL(PL81N.MQICHL) CHLTYPE(SVRCONN) CONNAME(xxx.xxx.xxx.xxx) CHLINSTYPE(CURRENT) SECPROT(TLSV13) SSLCERTI(E=support@pulsarintegration.com,CN=www.pulsarintegration.com,O=Pulsar Integration Inc.,ST=Chiba,C=JP) SSLCIPH(TLS_AES_128_GCM_SHA256) SSLPEER(SERIALNUMBER=02,CN=www.pulsarintegration.PL921WC.com,O=Pulsar Integration PL921WC Inc.,ST=Chiba,C=JP) STATUS(RUNNING) STOPREQ(NO) SUBSTATE(RECEIVE) RAPPLTAG(C:\...\mqpgfc.exe)

*オプションの説明
chs: チャネル・ステータスを表示
SECPROT: 現在使用中のセキュリティー・プロトコルを表示
SSLCERTI: リモート証明書発行者(CA)の完全識別名を表示
SSLCIPH: 接続によって使用されている CipherSpec を表示
SSLPEER: もう一方のチャネルのクライアントの識別名を表示


TLSによるクライアント接続の確認(MQCD)

次に、チャネル定義構造体(MQCD)を使用した接続をテストしてみます。 MQCDに証明書ラベルとCipherSpecを指定します。 証明書ラベル(CertificateLabel)を指定するにはMQCDのバージョン11(MQCD_VERSION_11)以上を指定することが必要です。


Ex. 12.2.1 SSL/TLSを使用したクライアント接続の実施(MQCD)

環境変数は MQSSLKEYR 以外は不要ですので、削除しておきます。 下記コマンドで SSLCipherSpec と CertificateLabel を指定してクライアント接続を作成します。

>set MQSERVER=
>set MQCHLTAB=
>set MQCHLLIB=
>set MQSSLKEYR=C:\...\clientssl\key
>mqpgfc -qm PL81N -q LQ1 MQGMO_WAIT MQWI_UNLIMITED -x xxx.xxx.xxx.xxx(xxxx) -ch PL81N.MQICHL -cl PL921WCA -cs TLS_AES_128_GCM_SHA256 MQCD_VERSION_11

*オプションの説明
MQGMO_WAIT: MQGMO.OptionsにMQGMO_WAITを設定します。
MQWI_UNLIMITED: MQGMO.WaitIntervalにMQWI_UNLIMITEDを設定します。
-x: MQCD.ConnectionNameに接続名を指定します。
-ch: MQCD.ChannelNameにチャネル名を指定します。
-cl: MQCD.CertificateLabelに証明書ラベルを指定します。
-cs: MQCD.SSLCipherSpecにSSL/TLS CipherSpecを指定します。
MQCD_VERSION_11: MQCD.VersionにMQCD_VERSION_11を指定します。

下記コマンドをサーバー側で実行し、TLSによるクライアント接続状況を確認します。

$ mqpcf chs -qm PL81N -c PL81N.MQICHL SECPROT SSLCERTI SSLCIPH SSLPEER
1: CHANNEL(PL81N.MQICHL) CHLTYPE(SVRCONN) CONNAME(xxx.xxx.xxx.xxx) CHLINSTYPE(CURRENT) SECPROT(TLSV13) SSLCERTI(E=support@pulsarintegration.com,CN=www.pulsarintegration.com,O=Pulsar Integration Inc.,ST=Chiba,C=JP) SSLCIPH(TLS_AES_128_GCM_SHA256) SSLPEER(SERIALNUMBER=02,CN=www.pulsarintegration.PL921WC.com,O=Pulsar Integration PL921WC Inc.,ST=Chiba,C=JP) STATUS(RUNNING) STOPREQ(NO) SUBSTATE(RECEIVE) RAPPLTAG(C:\...\mqpgfc.exe)


SSLPEERを使用した接続相手の確認

SSLPEERに接続相手のDNを指定することで、特定のDNを持つ相手のみに接続を許可することもできます。 SSLPEERはサーバー接続チャネル(SVRCONN)側でも、クライアント接続チャネル(CLNTCONN)側にも設定することが可能です。 SSLPEERには相手先のDNの一部、もしくは全てを設定します。


Ex. 12.3.1 サーバー接続チャネル(SVRCONN)にSSLPEERを設定して接続できる相手を制限する。

クライアント側(Windows)の証明書のDNは "SERIALNUMBER=02,CN=www.pulsarintegration.PL921WC.com,O=Pulsar Integration PL921WC Inc.,ST=Chiba,C=JP" です。 異なるDN "ST=Chiba,C=US" をサーバー側のチャネルに設定してみます。

$ mqpcf mqsc -qm PL81N -s "alter chl(PL81N.MQICHL) CHLTYPE(SVRCONN) SSLPEER('ST=Chiba,C=US')" 1: AMQ8016: IBM MQ channel changed. $ mqpcf chl -qm PL81N -c PL81N.MQICHL SSLPEER 1: CHANNEL(PL81N.MQICHL) CHLTYPE(SVRCONN) SSLPEER(ST=Chiba,C=US)

接続を実施してみます。

>mqpgfc -qm PL81N -q LQ1 MQGMO_WAIT MQWI_UNLIMITED -x xxx.xxx.xxx.xxx(xxxx) -ch PL81N.MQICHL -cl PL921WCA -cs TLS_AES_128_GCM_SHA256 MQCD_VERSION_11 MQCONNX fail : PL81N CompCd=02 ReasonCd=2393 !!! Queue Manager Connect Fail PL81N !!! >mqrc 2393 2393 0x00000959 MQRC_SSL_INITIALIZATION_ERROR

サーバー側のエラーログには、SSLPEERのDNが不一致の為、接続が失敗したことを説明するエラー・メッセージが表示されます。

AMQ9636: SSL distinguished name does not match peer name, channel 'PL81N.MQICHL'. EXPLANATION: The distinguished name, 'SERIALNUMBER=02,CN=www.pulsarintegration.PL921WC.com,O=Pulsar Integration PL921WC Inc.,ST=Chiba,C=JP', contained in the SSL certificate for the remote end of the channel does not match the local SSL peer name for channel 'PL81N.MQICHL'. The distinguished name at the remote host 'xxx.xxx.xxx.xxx' must match the peer name specified (which can be generic) before the channel can be started.

クライアント側(Windows)の証明書のDNは "SERIALNUMBER=02,CN=www.pulsarintegration.PL921WC.com,O=Pulsar Integration PL921WC Inc.,ST=Chiba,C=JP" です。 次にクライアント側の証明書のDNにマッチする文字列 "CN=www.pulsarintegration.PL921WC.com,O=Pulsar Integration PL921WC Inc." をサーバー側のチャネルに設定してみます。

$ mqpcf mqsc -qm PL81N -s "alter chl(PL81N.MQICHL) CHLTYPE(SVRCONN) SSLPEER('CN= www.pulsarintegration.PL921WC.com,O=Pulsar Integration PL921WC Inc.')" 1: AMQ8016: IBM MQ channel changed. $ mqpcf chl -qm PL81N -c PL81N.MQICHL SSLPEER 1: CHANNEL(PL81N.MQICHL) CHLTYPE(SVRCONN) SSLPEER(CN=www.pulsarintegration.PL921WC.com,O= Pulsar Integration PL921WC Inc.)

接続を実施してみます。

>mqpgfc -qm PL81N -q LQ1 MQGMO_WAIT MQWI_UNLIMITED -x xxx.xxx.xxx.xxx(xxxx) -ch PL81N.MQICHL -cl PL921WCA -cs TLS_AES_128_GCM_SHA256 MQCD_VERSION_11

問題なく接続できています。

$ mqpcf chs -qm PL81N -c PL81N.MQICHL SSLPEER
1: CHANNEL(PL81N.MQICHL) CHLTYPE(SVRCONN) CONNAME(xxx.xxx.xxx.xxx) CHLINSTYPE(CURRENT) SSLPEER(SERIALNUMBER=02,CN=www.pulsarintegration.PL921WC.com,O=Pulsar Integration PL921WC Inc.,ST=Chiba,C=JP) STATUS(RUNNING) STOPREQ(NO) SUBSTATE(RECEIVE) RAPPLTAG(C:\...\mqpgfc.exe)


Ex. 12.3.2 クライアント接続チャネル(MQCD)にSSLPEERを設定して接続できる相手を制限する。

サーバー側の証明書のDNは "C=AU, ST=Sydney, O=Pulsar Integration PL81NA Inc., CN=www.sd.pulsarintegration.PL81N.com" です。 これをクライアント・アプリケーション(mqpgfc)で、MQCD.SSLPeerNamePtr, SSLPeerNameLengthパラメータに設定してみます。 "-er"でDNの文字列を指定しますが、文字列内にスペースが入る場合は、ダブルクォート(")で囲ってくたさい。 DNの各要素の指定順は任意です。

>mqpgfc -qm PL81N -q LQ1 MQGMO_WAIT MQWI_UNLIMITED -x xxx.xxx.xxx.xxx(xxxx) -ch PL81N.MQICHL -cl PL921WCA -cs TLS_AES_128_GCM_SHA256 MQCD_VERSION_11 -er "C=AU, ST=Sydney, O=Pulsar Integration PL81NA Inc., CN=www.sd.pulsarintegration.PL81N.com"

*オプションの説明
MQGMO_WAIT: MQGMO.OptionsにMQGMO_WAITを設定します。
MQWI_UNLIMITED: MQGMO.WaitIntervalにMQWI_UNLIMITEDを設定します。
-x: MQCD.ConnectionNameに接続名を指定します。
-ch: MQCD.ChannelNameにチャネル名を指定します。
-cl: MQCD.CertificateLabelに証明書ラベルを指定します。
-cs: MQCD.SSLCipherSpecにSSL/TLS CipherSpecを指定します。
MQCD_VERSION_11: MQCD.VersionにMQCD_VERSION_11を指定します。
-er: MQCD.SSLPeerNamePtrにDNへの参照、MQCD.SSLPeerNamePtrにDNの長さを設定します。

問題なく接続できています。

$ mqpcf chs -qm PL81N -c PL81N.MQICHL SSLPEER
1: CHANNEL(PL81N.MQICHL) CHLTYPE(SVRCONN) CONNAME(xxx.xxx.xxx.xxx) CHLINSTYPE(CURRENT) SSLPEER(SERIALNUMBER=02,CN=www.pulsarintegration.PL921WC.com,O=Pulsar Integration PL921WC Inc.,ST=Chiba,C=JP) STATUS(RUNNING) STOPREQ(NO) SUBSTATE(RECEIVE) RAPPLTAG(C:\...\mqpgfc.exe)

サーバー側の証明書とは異なるDN "C=US, ST=New York" をクライアントのアプリケーション(mqpgfc)から設定してみます。

>mqpgfc -qm PL81N -q LQ1 MQGMO_WAIT MQWI_UNLIMITED -x xxx.xxx.xxx.xxx(xxxx) -ch PL81N.MQICHL -cl PL921WCA -cs TLS_AES_128_GCM_SHA256 MQCD_VERSION_11 -er "C=US, ST=New York" MQCONNX fail : PL81N CompCd=02 ReasonCd=2393 !!! Queue Manager Connect Fail PL81N !!! >mqrc 2393 2393 0x00000959 MQRC_SSL_INITIALIZATION_ERROR

クライアント側のエラーログには、SSLPEERのDNが不一致の為、接続が失敗したことを説明するエラー・メッセージが表示されます。

AMQ9636E: SSL 識別名が、ピア名 (チャネル 'PL81N.MQICHL') と一致していません。 説明: チャネルのリモート・エンドにおける SSL 証明書に含まれる識別名 'SERIALNUMBER=01,CN=www.sd.pulsarintegration.PL81N.com,O=Pulsar Integration PL81NA Inc.,ST=Sydney,C=AU' は、チャネル 'PL81N.MQICHL' のローカル SSL ピア名と 一致していません。チャネルが開始できるようになるには、その前に、リモート・ホス ト 'xxx.xxx.xxx.xxx(xxxx)' における識別名が、指定されたピア名 (総称も可能) と一 致しなければなりません。

以上で、SSL/TLSを使用した基本的なサーバー間接続と、クライアント接続のセットアップおよび確認方法についての説明は終わりです。 いろいろと試してみてください。

このページの先頭へ

このページの先頭へ