English

実践習得 IBM MQの基本

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

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

前回はサーバー間接続を例にOCSPを利用した証明書の失効(リボーク)チェックの構成方法をご紹介しました。 次に、クライアント接続/クライアント・アプリケーションでOCSPによる接続先のデジタル証明書を検証する方法をご紹介します。
簡単にはMQAIR(認証情報レコード)構造体のOCSPResponderURLに、OCSPリスポンダーのURLを設定することで実現できます。

以下、例としてクライアント・マシン上とサーバー・マシン上の両方に構築済みのCAでOCSPリスポンダーを起動します。

これ以降、前回までのSSL/TLSを使用したクライアント接続、サーバー間接続でのOCSPによる証明書の検証を実施する為の手順が実行されていることを前提としますので、実行してない場合は、これまでの章を参考にセットアップしておいてください。


クライアント接続でのOCSP構成の為の前提条件と制約事項

基本的には「OCSP構成の為の前提条件と制約事項」でご説明したサーバー間接続と同じですが、クライアント・アプリケーションの場合、OCSPリスポンダーへの接続情報はキューマネージャーへの接続毎に、MQCONNX() APIで参照されるMQAIR(認証情報レコード)に設定します。 MQAIRはリスト化することができますが、サーバー間接続時と同様に単一のOCSPリスポンダーにのみ接続可能で、MQAIR(認証情報レコード)のリストを指定しても、その先頭の MQAIR(認証情報レコード)のみが参照されます。


opensslを使用したOCSPリスポンダーの起動と確認

各マシンでのOCSPリスポンダーの起動方法はサーバー間接続で行った時と違いはないので、未実施の場合はサーバー間接続検証時にご説明した「opensslを使用したOCSPリスポンダーの起動と確認」を参照して実施してください。 OCSPリスポンダーの起動方法はクライアント側もサーバー側も同じで違いはありません。

※クライアント側 cd ...\openssl\winca >openssl ocsp -ignore_err -index index.txt -CA cacert.pem -rsigner cacert.pem -rkey private/cakey.pem -port 2560 Enter pass phrase for private/cakey.pem: winca ocsp: waiting for OCSP client connections... ※サーバー側 cd .../openssl/nsca >openssl ocsp -ignore_err -index index.txt -CA cacert.pem -rsigner cacert.pem -rkey private/cakey.pem -port 2560 Enter pass phrase for private/cakey.pem: nsca ocsp: waiting for OCSP client connections...

*オプションの説明
ocsp: オンライン証明書状態プロトコルユーティリティを実行。
-index indexfile: indexfile は、証明書失効情報を含む ca フォーマットのテキストインデックスファイル。
※index オプションが指定された場合、ocsp ユーティリティはレスポンダモードとなります。 それ以外ではクライアントモードで動作します。
-CA file: CA 証明書を指定します。
-rsigner file: OCSP レスポンスに署名する証明書を指定します。
-rkey file: OCSP レスポンスに署名する秘密鍵を指定します。
-port portnum: OCSP リクエストをリスンするポートを指定します。


クライアント接続でのOCSPの使用

既にTLSを使用したクライアント接続チャネルが通信可能な状態になっていること、キューマネージャーにクライアント・マシン側のOCSPリスポンダーへの接続を定義する認証情報が定義されていることを前提にします。 キューマネージャーでのOCSPリスポンダーへの接続構成をまだ行っていない場合は、クライアント接続での検証でも同じですので、「サーバー間接続でのOCSPリスポンダー参照の構成」を参考にセットアップしてください。


クライアント接続でのOCSPリスポンダー参照の指定

MQAIR(認証情報レコード)構造体のAuthInfoTypeにMQAIT_OCSP(デフォルトはMQAIT_CRL_LDAP)、OCSPResponderURLにOCSPリスポンダーのURLを設定します。 この時、MQAIR_VERSION_2以上を使用する必要があることにご注意ください。 デフォルトはMQAIR_VERSION_1です。 MQAIR_VERSION_2を指定しない場合はOCSPResponderURLの設定は無視されます。
作成したMQAIRへのポインタをMQSCO(SSL構成オプション)構造体のAuthInfoRecPtrにセットします。 この時、AuthInfoRecCountに 1 を設定します。 前述した通り、MQAIRのリストを作成し、AuthInfoRecCountに 1 より大きな値を設定することもできますが、OCSPの構成の場合は最初のMQAIRのみが参照されます。 さらに作成したMQSCOへのポインタをMQCNO(接続オプション)のSSLConfigPtrに設定します。 この時、MQCNO_VERSION_4以上を指定することが必要です(デフォルトはMQCNO_VERSION_1)。

構造体 Parameter デフォルト
MQAIR AuthInfoType MQAIT_OCSP MQAIT_CRL_LDAP
OCSPResponderURL http://<ip_addr >:<port> ""
Version MQAIR_VERSION_2 MQAIR_VERSION_1
MQSCO AuthInfoRecPtr <to MQAIR pointer> NULL
AuthInfoRecCount 1 0
MQCNO SSLConfigPtr <to MQSCO pointer> NULL
Version MQCNO_VERSION_4 MQCNO_VERSION_1


Ex. 15.1.1 OCSPでの証明書の検証を指定してキューマネージャーと接続

mqpgfcにOCSPでの証明書の検証を指定してキューマネージャーと接続します。

>mqpgfc -qm PL81N -q LQ1 MQGMO_WAIT MQWI_UNLIMITED -x <ipaddr or hostname>:<port> -ch PL81N.MQ ICHL -cl PL921WCA -cs TLS_AES_128_GCM_SHA256 MQCD_VERSION_11 -ru "http://<ipaddr or hostname>: <port>/" -tr MQAIR_VERSION_2 MQAIT_OCSP MQCNO_VERSION_4 -kr "..\clientssl\key" [2022/02/02 13:22:24.707] MQCONNX start qmgr:PL81N Options:0x00000000 [2022/02/02 13:22:26.205] MQCONNX stop hcon:50331654 qmgr:PL81N CompCd=00 ReasonCd=00 [2022/02/02 13:22:26.205] MQOPEN start hcon:50331654 ObjectName:LQ1 Options:0x00000001 [2022/02/02 13:22:26.337] MQOPEN stop hcon:50331654 hobj:101 ObjectName:LQ1 CompCd=00 ReasonCd =00 [2022/02/02 13:22:26.337] MQGET start hcon:50331654 hobj:101 Options:0x00000001 >

*オプションの説明
MQGMO_WAIT: キュー上にメッセージが到着するのを待つ
MQWI_UNLIMITED: メッセージ到着待ち時間は無制限
-x: キューマネージャーへの接続文字列
-ch: サーバー接続チャネル名
-cl: 証明書ラベル
-cs: サイファー・スペック
MQCD_VERSION_11: MQCD(チャネル定義)構造体のバージョン(証明書ラベル指定を有効化する為)
-ru: OCSPリスポンダーに接続する為のURL
MQAIR_VERSION_2: MQAIR(認証情報レコード)構造体のバージョン(OCSPResponderURLを有効かする為)
MQAIT_OCSP: MQAIR(認証情報レコード)のタイプはOCSP
MQCNO_VERSION_4: MQSCO(SSL構成オプション)構造体をMQCNO(接続オプション)に指定可能にする。
-kr: キー・リポジトリの場所(絶対パスとキー・リポジトリ・ファイルの拡張子を除いた部分(デフォルトは"key"))。 環境変数 MQSSLKEYR で指定するか、本パラメータでMQSCO(SSL構成オプション)構造体の KeyRepository フィールドに直接設定する。

チャネルが正常に開始されることを確認します。 下記は、WindowsマシンからNonStopマシンへクライアント接続した例です。

$ mqpcf chs -qm PL81N -c PL81N.MQICHL SECPROT SSLCERTI SSLCIPH
1: CHANNEL(PL81N.MQICHL) CHLTYPE(SVRCONN) CONNAME(16.168.2.37) 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) STATUS(RUNNING) STOPREQ(NO) SUBSTATE(RECEIVE) RAPPLTAG(...\mqpgfc.exe)

fig 15.1


OCSPリスポンダーに接続できない場合の挙動(クライアント接続)

サーバー側のOCSPリスポンダーを停止します。
アプリケーションがNonStopサーバー側のサーバー証明書をチェックできなくなります。

$ openssl ocsp -ignore_err -index index.txt -CA cacert.pem -rsigner cacert.pem -rkey private/cakey.pem -port 2560
Enter pass phrase for private/cakey.pem:
ocsp: waiting for OCSP client connections...
^C ※CTRL+Cで停止。
$

アプリケーションを再起動して状況を確認します。

>mqpgfc -qm PL81N -q LQ1 MQGMO_WAIT MQWI_UNLIMITED -x <ipaddr or hostname>:<port> -ch PL81N.MQ ICHL -cl PL921WCA -cs TLS_AES_128_GCM_SHA256 MQCD_VERSION_11 -ru "http://<ipaddr or hostname>: <port>/" -tr MQAIR_VERSION_2 MQAIT_OCSP MQCNO_VERSION_4 -kr "..\clientssl\key" [2022/02/02 14:38:22.459] MQCONNX start qmgr:PL81N Options:0x00000000 [2022/02/02 14:38:25.569] MQCONNX stop hcon:-1 qmgr:PL81N CompCd=02 ReasonCd=2393 MQCONNX fail : PL81N CompCd=02 ReasonCd=2393 !!! Queue Manager Connect Fail PL81N !!! >mqrc 2393 2393 0x00000959 MQRC_SSL_INITIALIZATION_ERROR ※理由コード 2393 MQRC_SSL_INITIALIZATION_ERRORで接続が失敗します。

OCSPAuthentication はクライアント側は mqclient.iniのSSLスタンザに設定しますが、未設定の状態なのでその挙動はデフォルトの REQUIRED です。 双方のエラー内容を確認します。

※クライアント・アプリケーション(Windows)側には AMQ9716E が出力され、チャネルが開始できなかった理由として、 失効状況が確認できなかったことが表示されます。 ----- amqccisa.c : 9406 ------------------------------------------------------- AMQ9716E: チャネル 'PL81N.MQICHL' のリモート SSL 証明書の失効状況検査が失敗しま した。 説明: IBM MQ は以下のいずれかの理由により、リモート SSL 証明書の失効状況の判別に失敗 しました。 (a) チャネルが証明書の CRL サーバーまたは OCSP 応答側と連絡を取ることができなか った。 (b) 連絡を受けた OCSP 応答側のどれも、証明書の失効状況を知らなかった。 (c) OCSP 応答を受け取ったが、応答のデジタル署名を検証できなかった。 ------------------------- ※FFSTも生成されます。 +-----------------------------------------------------------------------------+ | | | IBM MQ First Failure Symptom Report | | ========================================= | .... | Probe Id :- XC022001 | .... | Major Errorcode :- rrcE_SSL_REVOCATION_CHECK_REQUIRED | | Minor Errorcode :- OK | | Probe Type :- MSGAMQ9716 | | Probe Severity :- 2 | | Probe Description :- AMQ9716E: チャネル 'PL81N.MQICHL' のリモート SSL | | 証明書の失効状況検査が失敗しました。 | | FDCSequenceNumber :- 0 | | Comment1 :- | | [Class=]GSKVALMethod::X509[Issuer=]EMAIL=support@sd.pulsarintegration.com | | ,CN=www.sd.pulsarintegration.com,O=Pulsar Integration SD | | Inc.,ST=Sydney,C=AU[#=]01[Subject=]CN=www.sd.pulsarintegration.PL81N.com, | | O=Pulsar Integration PL81NA Inc.,ST=Sydney,C=AU | | Comment2 :- gsk_attribute_get_buffer - | | GSK_UNKNOWNREVOCATIONSTATUS_SUBJECT | | Comment3 :- PL81N.MQICHL | | | +-----------------------------------------------------------------------------+ ※クライアント・アプリケーションがチャネル接続を試行前にOCSPリスポンダーへの接続に失敗して終了する為、NonStop (サーバー)側には何もエラーは出力されません。

fig 15.2


次に、NonStop(サーバー)側のOCSPリスポンダーを起動し、クライアント・アプリケーション(Windows)側のOCSPリスポンダーを停止しておきます。

>mqpgfc -qm PL81N -q LQ1 MQGMO_WAIT MQWI_UNLIMITED -x <ipaddr or hostname>:<port> -ch PL81N.MQ ICHL -cl PL921WCA -cs TLS_AES_128_GCM_SHA256 MQCD_VERSION_11 -ru "http://<ipaddr or hostname>: <port>/" -tr MQAIR_VERSION_2 MQAIT_OCSP MQCNO_VERSION_4 -kr "..\clientssl\key" [2022/02/02 15:23:38.532] MQCONNX start qmgr:PL81N Options:0x00000000 [2022/02/02 15:23:59.409] MQCONNX stop hcon:-1 qmgr:PL81N CompCd=02 ReasonCd=2393 MQCONNX fail : PL81N CompCd=02 ReasonCd=2393 !!! Queue Manager Connect Fail PL81N !!! >mqrc 2393 2393 0x00000959 MQRC_SSL_INITIALIZATION_ERROR ※同様に理由コード 2393 MQRC_SSL_INITIALIZATION_ERRORで接続が失敗します。

双方のエラー・ログへの出力内容を確認します。

※クライアント・アプリケーション(Windows)側には AMQ9665E が出力され、リモート・サイドからTLS接続がクローズ されたことが報告されます。 ----- amqcrhna.c : 785 -------------------------------------------------------- AMQ9665E: SSL 接続が、チャネル 'PL81N.MQICHL' のリモート・エンドによってクロー ズされました。 ----- amqccisa.c : 11368 ------------------------------------------------------ ※NonStop(サーバー)側には AMQ9716 が出力され、チャネルが開始できなかった理由として、失効状況が確認できなか ったことが表示されます。 ----- amqrmrsa.c : 926 -------------------------------------------------------- AMQ9716: Remote SSL certificate revocation status check failed for channel .... The details of the certificate in question are '/C=JP/ST=Chiba/O=Pulsar Integration PL921WC Inc./CN=www.pulsarintegration.PL921WC.com'. .... IBM MQ does not allow the channel to start unless the certificate revocation status can be determined. .... ----- amqcciso.c : 3968 -------------------------------------------------------

fig 15.3


証明書が検証できない場合(Unknown)の動作の変更(クライアント接続)

クライアントの場合は、OCSPAuthentication を mqclient.ini の SSLスタンザに設定すること以外はサーバー間接続と同様ですので、「証明書が検証できない場合(Unknown)の動作の変更」での説明を参照してください。


OCSPリスポンダーへの照会結果が失効(Revoke)だった場合の挙動(クライアント接続)

NonStop側のサーバー証明書を失効させてみます。

$ cd .../openssl/nsca $ openssl ca -config openssl.cnf -cert cacert.pem -keyfile private/cakey.pem -revoke .../var/ mqm/qmgrs/PL81N/ssl/PL81NA.pem Using configuration from openssl.cnf Enter pass phrase for private/cakey.pem: Revoking Certificate 01. Data Base Updated $ $ cat index.txt R 310802082027Z 210929080911Z 01 unknown /C=AU/ST=Sydney/O=Pulsar Integration PL81NA Inc./CN=www.sd.pulsarintegration.PL81N.com V 310824073603Z 02 unknown /C=AU/ST=Sydney/O=Pulsar Integration PL81NA Inc./CN=www.sd.pulsarintegration.PL81Nec.com

OCSPリスポンダーの再起動を忘れないようにしてください。

$ openssl ocsp -ignore_err -index index.txt -CA cacert.pem -rsigner cacert.pem -rkey private/ cakey.pem -port 2560 Enter pass phrase for private/cakey.pem: Waiting for OCSP client connections... ^C ※CTRL+Cで停止 $ $ openssl ocsp -ignore_err -index index.txt -CA cacert.pem -rsigner cacert.pem -rkey private/ cakey.pem -port 2560 Enter pass phrase for private/cakey.pem: nsca Waiting for OCSP client connections...

クライアント・アプリケーション(Windows)を起動してTLS接続を試み、その状況を確認します。

>mqpgfc -qm PL81N -q LQ1 MQGMO_WAIT MQWI_UNLIMITED -x <ipaddr or hostname>:<port> -ch PL81N.MQ ICHL -cl PL921WCA -cs TLS_AES_128_GCM_SHA256 MQCD_VERSION_11 -ru "http://<ipaddr or hostname>: <port>/" -tr MQAIR_VERSION_2 MQAIT_OCSP MQCNO_VERSION_4 -kr "..\clientssl\key" [2022/02/02 16:46:29.752] MQCONNX start qmgr:PL81N Options:0x00000000 [2022/02/02 16:46:35.380] MQCONNX stop hcon:-1 qmgr:PL81N CompCd=02 ReasonCd=2393 MQCONNX fail : PL81N CompCd=02 ReasonCd=2393 !!! Queue Manager Connect Fail PL81N !!! C:\Users\okadako>mqrc 2393 2393 0x00000959 MQRC_SSL_INITIALIZATION_ERROR

双方のエラー・ログへの出力内容を確認します。

※クライアント・アプリケーション(Windows)側には AMQ9633E が出力され、チャネルが開始できなかった理由として、 証明書が不正であったことが表示されます。 ----- amqcrhna.c : 789 -------------------------------------------------------- AMQ9633E: チャネル 'PL81N.MQICHL' の SSL 証明書が不正です。 .... (e) OCSP 応答側はそれが失効したことを示している。 .... 検証できなかった証明書の詳細は '[Class=]GSKVALMethod::X509[Issuer=]EMAIL=support@sd.pulsarintegration.com, CN=www.sd.pulsarintegration.com,O=Pulsar Integration SD Inc.,ST=Sydney,C=AU[#=]01[Subject=]CN=www.sd.pulsarintegration.PL81N.com,O=Pulsar Integration PL81NA Inc.,ST=Sydney,C=AU' です。 証明書の検証エラーは 575032 です。 .... ----- amqccisa.c : 8789 ------------------------------------------------------- ※サーバー(NonStop)側にも AMQ9633 が出力され、チャネルが開始できなかった理由として、証明書が不正であったこ とが表示されます。 ------------------------------------------------------------------------------- AMQ9633: Bad SSL certificate for channel '????'. .... (e) an OCSP responder has indicated that it is revoked .... The details of the certificate which could not be validated are 'sslv3 alert bad certificate'. The certificate validation error was 1042. .... ----- amqcciso.c : 9785 -------------------------------------------------------

fig 15.4


次に、サーバー側の失効を取り消し、反対のクライアント・アプリケーション(Windows)側のサーバー証明書を失効させてテストしてみます。

cd ,,,\openssl\winca >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 V 310824072450Z 03 unknown /C=JP/ST=Chiba/O=Pulsar Integration PL921WC Inc./CN=www.pulsarintegration.PL921WCec.com >openssl ca -config openssl.cnf -cert cacert.pem -keyfile private\cakey.pem -revoke ..\..\ clientssl\PL921WCA.pem Using configuration from openssl.cnf Enter pass phrase for private\cakey.pem: Revoking Certificate 02. Data Base Updated >type index.txt V 310802064352Z 01 unknown /C=JP/ST=Chiba/O=Pulsar Integration PL92WA Inc./CN=www.pulsarintegration.PL92W.com R 310816062807Z 220202080659Z 02 unknown /C=JP/ST=Chiba/O=Pulsar Integration PL921WC Inc./CN=www.pulsarintegration.PL921WC.com V 310824072450Z 03 unknown /C=JP/ST=Chiba/O=Pulsar Integration PL921WC Inc./CN=www.pulsarintegration.PL921WCec.com

OCSPリスポンダーの再起動を忘れないようにしてください。

$ openssl ocsp -ignore_err -index index.txt -CA cacert.pem -rsigner cacert.pem -rkey private/ cakey.pem -port 2560 Enter pass phrase for private/cakey.pem: ocsp: waiting for OCSP client connections... ^C ※CTRL+Cで停止 $ >openssl ocsp -ignore_err -index index.txt -CA cacert.pem -rsigner cacert.pem -rkey private/ cakey.pem -port 2560 Enter pass phrase for private/cakey.pem: ocsp: waiting for OCSP client connections...

クライアント・アプリケーション(Windows)を起動してTLS接続を試み、その状況を確認します。

>mqpgfc -qm PL81N -q LQ1 MQGMO_WAIT MQWI_UNLIMITED -x <ipaddr or hostname>:<port> -ch PL81N.MQ ICHL -cl PL921WCA -cs TLS_AES_128_GCM_SHA256 MQCD_VERSION_11 -ru "http://<ipaddr or hostname>: <port>/" -tr MQAIR_VERSION_2 MQAIT_OCSP MQCNO_VERSION_4 -kr "..\clientssl\key" [2022/02/02 17:19:44.769] MQCONNX start qmgr:PL81N Options:0x00000000 [2022/02/02 17:19:50.793] MQCONNX stop hcon:-1 qmgr:PL81N CompCd=02 ReasonCd=2393 MQCONNX fail : PL81N CompCd=02 ReasonCd=2393 !!! Queue Manager Connect Fail PL81N !!! C:\Users\okadako>mqrc 2393 2393 0x00000959 MQRC_SSL_INITIALIZATION_ERROR

双方のエラー・ログへの出力内容を確認します。

※クライアント・アプリケーション(Windows)側には AMQ9665E が出力され、リモート・サイドからTLS接続がクローズ されたことが報告されます。 ----- amqcrhna.c : 785 -------------------------------------------------------- AMQ9665E: SSL 接続が、チャネル 'PL81N.MQICHL' のリモート・エンドによってクロー ズされました。 ----- amqccisa.c : 11368 ------------------------------------------------------ ※サーバー(NonStop)側には AMQ9633 が出力され、チャネルが開始できなかった理由として、証明書が不正であったこ とが表示されます。 ------------------------------------------------------------------------------- AMQ9633: Bad SSL certificate for channel '????'. .... (e) an OCSP responder has indicated that it is revoked .... The details of the certificate which could not be validated are 'Certificate /C=JP/ST=Chiba/O=Pulsar Integration PL921WC Inc./CN=www.pulsarintegration.PL921WC.com was revoked by AUTHINFO URL http://xxx.xxx.xxx.xxx:xxxx'. The certificate validation error was 23. .... ----- amqcciso.c : 9785 -------------------------------------------------------

fig 15.5

サーバー間接続時と同じですが、検証後に失効を取り消す場合は、index.txtのバックアップを使用して元に戻します。 OCSPリスポンダーの再起動も忘れないでください。

$ cp -p index.txt.old index.txt
$ cat index.txt
V 310802082027Z 01 unknown /C=AU/ST=Sydney/O=Pulsar Integration PL81NA Inc./CN=www.sd.pulsarintegration.PL81N.com
V 310824073603Z 02 unknown /C=AU/ST=Sydney/O=Pulsar Integration PL81NA Inc./CN=www.sd.pulsarintegration.PL81Nec.com
※index.txtをリストア後、OCSPリスポンダーの再起動する。

このページの先頭へ

このページの先頭へ