English

実践習得 IBM MQの基本

SSL/TLSの構成(4)楕円曲線

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

SSL/TLSを使用する場合に、CipherSpecを決めると、そのCipherSpecと互換性のあるデジタル証明書(サーバー証明書)を準備することが必要になります。 デジタル証明書には大きく次の3種類があります。

CipherSpec名Prefix 公開鍵のタイプ デジタル署名暗号化アルゴリズム 鍵交換方式
Type 1 ECDHE_ECDSA_ 楕円曲線 ECDSA ECDHE
Type 2 ECDHE_RSA_ RSA RSA ECDHE
Type 3 上記以外
RSA RSA RSA

今回の検証作業では、イントラネットCAを作成し、RSA公開鍵/自己署名のCA(root)証明書を作成しましたが、それはそのまま全タイプで使用できます。 サーバー(CA署名)証明書は、RSA公開鍵/RSA署名で作成しました。 このタイプの証明書は上記CipherSpecsタイプの内、「公開鍵」と「デジタル署名暗号化アルゴリズム」の両方がRSAである、Type2とType3で使用可能です。 Type1のCipherSpecを使用する為には、「公開鍵」のタイプが"楕円曲線"、「デジタル署名暗号化アルゴリズム」が"ECDSA"である証明書を準備する必要があります。

この回では、Type1のCipherSpecを使用する場合についての作業手順についてご説明します。 証明書要求の作成の方法以外は、ほとんどこれまでの手順と同じですので詳しい解説は省略いたしますので、必要に応じて前回までの説明を参照するようにしてください。 以下は、クライアント接続を例にしていますが、サーバー間接続でも基本的に考え方は同じです。


Type1のCipherSpecを使用する為のCSRの作成(GSKit)

前回までのSSL/TLSをクライアント接続で使用する為の手順を一度も実行していない場合は、「クライアントでのSSL/TLSのセットアップ(CSRの作成まで)(GSKit)」の「証明書の署名リクエスト(CSR)を作成(Windows, Linux)」の直前までを実施してくだい。

Type1のCipherSpec(ECDHE_ECDSA_*)を使用するには、runmqakm コマンドの"-sig_alg"に Elliptic Curve ECDSA 署名アルゴリズムを指定して証明書要求を作成する必要があります。 ここでは、EC_ecdsa_with_SHA512 を使用してみます。 楕円曲線アルゴリズムの場合、指定可能な鍵サイズの値は 256、384、または 512 で、デフォルトの楕円曲線鍵サイズは、署名アルゴリズムによって異なり、SHA256 の場合は 256、SHA384 の場合は 384、SHA512 の場合は 512 になります。 それ以外の鍵サイズを指定すると GSKKM_ERR_CRYPTO_UNSUPPORTED_MODULUS_SIZE が発生しCSRの作成に失敗します。
※下記は Windows の例ですが Linux も同様で、一行で指定します。 DNには各サーバー毎の内容を指定します。

...\clientssl>runmqakm -certreq -create -db key.kdb -pw PL921WCpass -label PL921WCB -dn "CN=www.pulsarintegration.PL921WCec.com,O=Pulsar Integration PL921WC Inc.,S=Chiba,C=JP" -size 512 -file key.csr -sig_alg EC_ecdsa_with_SHA512 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: 認証要求の作成中に使用されるハッシュ・アルゴリズムを指定します。 このハッシュ・アルゴリズムは、新たに作成された証明書要求に関連付けられた署名を作成するために使用されます。

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

...\clientssl>runmqckm -certreq -details -label PL921WCB -db key.kdb ... A password is required to access the source key database. Please enter a password: PL921WCpass Label: PL921WCA Key Size:522 Subject: CN=www.pulsarintegration.PL921WCec.com, O=Pulsar Integration PL921WC Inc., ST=Chiba, C=JP Fingerprint: 50:7E:85:04:07:A7:2F:65:52:0D:71:56:D4:A5:BB:21 Signature Algorithm: SHA512withECDSA (1.2.840.10045.4.3.4)

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

※Key Sizeが522と表示されますが、正確には楕円曲線には512というサイズはない為ですので、問題ありません。 "-size 512"の指定を省略しても、EC_ecdsa_with_SHA512を指定した場合は、デフォルトで Key Size は 522 になります。


Type1のCipherSpecを使用する為のCSRの作成(Openssl)

Opensslの場合は、CSRの作成手順はこれまでのRSAとはかなり異なります。 HPE NonStopの場合はここで説明する手順を実施してください。


Opensslで利用可能な楕円曲線の確認

まず、利用しているOpensslのバージョンで使用可能な楕円曲線を確認します。

$ openssl ecparam -list_curves secp112r1 : SECG/WTLS curve over a 112 bit prime field secp112r2 : SECG curve over a 112 bit prime field secp128r1 : SECG curve over a 128 bit prime field secp128r2 : SECG curve over a 128 bit prime field secp160k1 : SECG curve over a 160 bit prime field secp160r1 : SECG curve over a 160 bit prime field secp160r2 : SECG/WTLS curve over a 160 bit prime field secp192k1 : SECG curve over a 192 bit prime field secp224k1 : SECG curve over a 224 bit prime field secp224r1 : NIST/SECG curve over a 224 bit prime field secp256k1 : SECG curve over a 256 bit prime field secp384r1 : NIST/SECG curve over a 384 bit prime field secp521r1 : NIST/SECG curve over a 521 bit prime field prime192v1: NIST/X9.62/SECG curve over a 192 bit prime field prime192v2: X9.62 curve over a 192 bit prime field prime192v3: X9.62 curve over a 192 bit prime field prime239v1: X9.62 curve over a 239 bit prime field prime239v2: X9.62 curve over a 239 bit prime field prime239v3: X9.62 curve over a 239 bit prime field prime256v1: X9.62/SECG curve over a 256 bit prime field sect113r1 : SECG curve over a 113 bit binary field sect113r2 : SECG curve over a 113 bit binary field sect131r1 : SECG/WTLS curve over a 131 bit binary field sect131r2 : SECG curve over a 131 bit binary field sect163k1 : NIST/SECG/WTLS curve over a 163 bit binary field sect163r1 : SECG curve over a 163 bit binary field sect163r2 : NIST/SECG curve over a 163 bit binary field sect193r1 : SECG curve over a 193 bit binary field sect193r2 : SECG curve over a 193 bit binary field sect233k1 : NIST/SECG/WTLS curve over a 233 bit binary field sect233r1 : NIST/SECG/WTLS curve over a 233 bit binary field sect239k1 : SECG curve over a 239 bit binary field sect283k1 : NIST/SECG curve over a 283 bit binary field sect283r1 : NIST/SECG curve over a 283 bit binary field sect409k1 : NIST/SECG curve over a 409 bit binary field sect409r1 : NIST/SECG curve over a 409 bit binary field sect571k1 : NIST/SECG curve over a 571 bit binary field sect571r1 : NIST/SECG curve over a 571 bit binary field c2pnb163v1: X9.62 curve over a 163 bit binary field c2pnb163v2: X9.62 curve over a 163 bit binary field c2pnb163v3: X9.62 curve over a 163 bit binary field c2pnb176v1: X9.62 curve over a 176 bit binary field c2tnb191v1: X9.62 curve over a 191 bit binary field c2tnb191v2: X9.62 curve over a 191 bit binary field c2tnb191v3: X9.62 curve over a 191 bit binary field c2pnb208w1: X9.62 curve over a 208 bit binary field c2tnb239v1: X9.62 curve over a 239 bit binary field c2tnb239v2: X9.62 curve over a 239 bit binary field c2tnb239v3: X9.62 curve over a 239 bit binary field c2pnb272w1: X9.62 curve over a 272 bit binary field c2pnb304w1: X9.62 curve over a 304 bit binary field c2tnb359v1: X9.62 curve over a 359 bit binary field c2pnb368w1: X9.62 curve over a 368 bit binary field c2tnb431r1: X9.62 curve over a 431 bit binary field wap-wsg-idm-ecid-wtls1: WTLS curve over a 113 bit binary field wap-wsg-idm-ecid-wtls3: NIST/SECG/WTLS curve over a 163 bit binary field wap-wsg-idm-ecid-wtls4: SECG curve over a 113 bit binary field wap-wsg-idm-ecid-wtls5: X9.62 curve over a 163 bit binary field wap-wsg-idm-ecid-wtls6: SECG/WTLS curve over a 112 bit prime field wap-wsg-idm-ecid-wtls7: SECG/WTLS curve over a 160 bit prime field wap-wsg-idm-ecid-wtls8: WTLS curve over a 112 bit prime field wap-wsg-idm-ecid-wtls9: WTLS curve over a 160 bit prime field wap-wsg-idm-ecid-wtls10: NIST/SECG/WTLS curve over a 233 bit binary field wap-wsg-idm-ecid-wtls11: NIST/SECG/WTLS curve over a 233 bit binary field wap-wsg-idm-ecid-wtls12: WTLS curve over a 224 bit prime field Oakley-EC2N-3: IPSec/IKE/Oakley curve #3 over a 155 bit binary field. Not suitable for ECDSA. Questionable extension field! Oakley-EC2N-4: IPSec/IKE/Oakley curve #4 over a 185 bit binary field. Not suitable for ECDSA. Questionable extension field! brainpoolP160r1: RFC 5639 curve over a 160 bit prime field brainpoolP160t1: RFC 5639 curve over a 160 bit prime field brainpoolP192r1: RFC 5639 curve over a 192 bit prime field brainpoolP192t1: RFC 5639 curve over a 192 bit prime field brainpoolP224r1: RFC 5639 curve over a 224 bit prime field brainpoolP224t1: RFC 5639 curve over a 224 bit prime field brainpoolP256r1: RFC 5639 curve over a 256 bit prime field brainpoolP256t1: RFC 5639 curve over a 256 bit prime field brainpoolP320r1: RFC 5639 curve over a 320 bit prime field brainpoolP320t1: RFC 5639 curve over a 320 bit prime field brainpoolP384r1: RFC 5639 curve over a 384 bit prime field brainpoolP384t1: RFC 5639 curve over a 384 bit prime field brainpoolP512r1: RFC 5639 curve over a 512 bit prime field brainpoolP512t1: RFC 5639 curve over a 512 bit prime field SM2 : SM2 curve over a 256 bit prime field

*オプションの説明
ecparam: 楕円曲線パラメータ関連の操作
-list_curves: 利用可能な楕円曲線を表示


楕円曲線証明書用のプライベート・キーの作成

表示される楕円曲線暗号の詳細の説明は、他に譲りますが、ここでは prime256v1 を使用して、楕円曲線証明書の為のプライベート・キーを作成します。 サーバー証明書を作成した時と同様、.../openssl/nsca 下にPL81N_Cという名前のディレクトリを作成して作業しています。 作業管理の方法は決まったやり方はありませんので、ご都合に合わせて自由に決めて作業してください。

$ cd ..../openssl/nsca $ mkdir PL81N_C $ cd PL81N_C $ openssl ecparam -genkey -name prime256v1 -out ecdsa.key $ ls -l total 1 -rw------- 1 ... 302 Aug 26 13:18 PL81Nec.key

*オプションの説明
ecparam: 楕円曲線パラメータ関連の操作
-genkey: 楕円曲線キーの生成
-name val: 使用する楕円曲線パラメータを指定
-out outfile: 楕円曲線キーを出力するファイル名

作成したプライベート・キーを確認します。

$ openssl ec -in ecdsa.key -text -noout read EC key Private-Key: (256 bit) priv: b6:3c:2e:b3:37:c3:41:ca:8a:a2:68:4c:8f:dc:3d: ea:80:47:38:8d:92:b1:9a:51:71:2c:c0:f7:2c:09: 27:f2 pub: 04:7f:09:47:e9:84:6e:b8:5f:7c:85:15:36:5b:a2: 46:9e:e5:e8:04:14:1e:00:d9:d1:f4:7c:d6:9a:d9: 22:08:11:b8:fe:72:de:89:a2:53:31:91:95:40:19: 99:2a:b8:c7:0b:6b:a1:0b:47:3f:ea:59:66:cd:2c: 6f:29:87:36:ce ASN1 OID: prime256v1 NIST CURVE: P-256

*オプションの説明
ec: 楕円曲線関連の操作
-in filename: 楕円曲線キー・ファイル名を指定します。
-text: 読み込んだファイルを可読性のある形式に変換して出力します。
-noout: キー・ファイルの符号化された形式での出力を抑制します。


プライベート・キーにパス・フレーズを設定

プライベート・キーにパス・フレーズを追加する際に使用可能なエンコーディング・アルゴリズムを表示させます。

$ openssl enc -ciphers Supported ciphers: -aes-128-cbc -aes-128-cfb -aes-128-cfb1 -aes-128-cfb8 -aes-128-ctr -aes-128-ecb -aes-128-ofb -aes-192-cbc -aes-192-cfb -aes-192-cfb1 -aes-192-cfb8 -aes-192-ctr -aes-192-ecb -aes-192-ofb -aes-256-cbc -aes-256-cfb -aes-256-cfb1 -aes-256-cfb8 -aes-256-ctr -aes-256-ecb -aes-256-ofb -aes128 -aes128-wrap -aes192 -aes192-wrap -aes256 -aes256-wrap -aria-128-cbc -aria-128-cfb -aria-128-cfb1 -aria-128-cfb8 -aria-128-ctr -aria-128-ecb -aria-128-ofb -aria-192-cbc -aria-192-cfb -aria-192-cfb1 -aria-192-cfb8 -aria-192-ctr -aria-192-ecb -aria-192-ofb -aria-256-cbc -aria-256-cfb -aria-256-cfb1 -aria-256-cfb8 -aria-256-ctr -aria-256-ecb -aria-256-ofb -aria128 -aria192 -aria256 -bf -bf-cbc -bf-cfb -bf-ecb -bf-ofb -blowfish -camellia-128-cbc -camellia-128-cfb -camellia-128-cfb1 -camellia-128-cfb8 -camellia-128-ctr -camellia-128-ecb -camellia-128-ofb -camellia-192-cbc -camellia-192-cfb -camellia-192-cfb1 -camellia-192-cfb8 -camellia-192-ctr -camellia-192-ecb -camellia-192-ofb -camellia-256-cbc -camellia-256-cfb -camellia-256-cfb1 -camellia-256-cfb8 -camellia-256-ctr -camellia-256-ecb -camellia-256-ofb -camellia128 -camellia192 -camellia256 -cast -cast-cbc -cast5-cbc -cast5-cfb -cast5-ecb -cast5-ofb -chacha20 -des -des-cbc -des-cfb -des-cfb1 -des-cfb8 -des-ecb -des-ede -des-ede-cbc -des-ede-cfb -des-ede-ecb -des-ede-ofb -des-ede3 -des-ede3-cbc -des-ede3-cfb -des-ede3-cfb1 -des-ede3-cfb8 -des-ede3-ecb -des-ede3-ofb -des-ofb -des3 -des3-wrap -desx -desx-cbc -id-aes128-wrap -id-aes128-wrap-pad -id-aes192-wrap -id-aes192-wrap-pad -id-aes256-wrap -id-aes256-wrap-pad -id-smime-alg-CMS3DESwrap -idea -idea-cbc -idea-cfb -idea-ecb -idea-ofb -rc2 -rc2-128 -rc2-40 -rc2-40-cbc -rc2-64 -rc2-64-cbc -rc2-cbc -rc2-cfb -rc2-ecb -rc2-ofb -rc4 -rc4-40 -seed -seed-cbc -seed-cfb -seed-ecb -seed-ofb -sm4 -sm4-cbc -sm4-cfb -sm4-ctr -sm4-ecb -sm4-ofb

*オプションの説明
enc: 共通鍵暗号化方式を使った暗号化または複合の実施等
-ciphers: 使用可能なエンコーディング・アルゴリズムを表示する。

例として、aes256を指定します。

$ openssl ec -in ecdsa.key -out PL81Nec.key -aes256 read EC key writing EC key Enter PEM pass phrase: PL81Necpass Verifying - Enter PEM pass phrase: PL81Necpass $ ls -l total 2 -rw------- .... 314 Aug 26 14:32 PL81Nec.key -rw------- .... 302 Aug 26 13:18 ecdsa.key

*オプションの説明
ec: 楕円曲線関連の操作
-in filename: 楕円曲線キー・ファイル名を指定します。
-out: 出力するパス・フレーズを設定した楕円曲線キー・ファイル名を指定します。
-aes256: エンコーディング・アルゴリズムとして AES256 を使用します。

作成したプライベート・キーを表示させる際に、パス・フレーズの入力が求められるようになります。

$ openssl ec -in PL81Nec.key -text -noout read EC key Enter PEM pass phrase: PL81Necpass Private-Key: (256 bit) priv: b6:3c:2e:b3:37:c3:41:ca:8a:a2:68:4c:8f:dc:3d: ea:80:47:38:8d:92:b1:9a:51:71:2c:c0:f7:2c:09: 27:f2 pub: 04:7f:09:47:e9:84:6e:b8:5f:7c:85:15:36:5b:a2: 46:9e:e5:e8:04:14:1e:00:d9:d1:f4:7c:d6:9a:d9: 22:08:11:b8:fe:72:de:89:a2:53:31:91:95:40:19: 99:2a:b8:c7:0b:6b:a1:0b:47:3f:ea:59:66:cd:2c: 6f:29:87:36:ce ASN1 OID: prime256v1 NIST CURVE: P-256


作成した秘密鍵(プライベート・キー)から証明書要求(CSR)を作成

CSRの作成時、OPENSSL_CONF環境変数が設定されていないと、openssl.cnfファイルが見つからない旨表示されて、opensslコマンドが失敗します。 ここでは、「各サーバーでのSSL/TLSのセットアップ(CSRの作成まで)(Openssl)」で使用したopnessl.cnfファイルをコピーし、識別名を一部変更したものを使用します。
※参考までに、同じCAで、識別名(DN: Distinguished Name)が同じ証明書要求に署名をリクエストすると下記エラーが発生して失敗します。

$ openssl ca -in PL81N_C/PL81Necreq.pem Using configuration from .../openssl/nsca/openssl.cnf Enter pass phrase for .../openssl/nsca/private/cakey.pem: Check that the request matches the signature Signature ok ERROR:There is already a certificate for /C=AU/ST=Sydney/O=Pulsar Integration PL81NA Inc. /CN=www.sd.pulsarintegration.PL81N.com The matching entry has the following details Type :Valid Expires on :340814064049Z Serial Number :01 File name :unknown Subject Name :/C=AU/ST=Sydney/O=Pulsar Integration PL81NA Inc. /CN=www.sd.pulsarintegration.PL81N.com

※同じ識別名(DN: Distinguished Name)で証明書を再発行する方法についてはOpensslのドキュメントを参考にしてください。

下記例では、識別名(DN: Distinguished Name)の一部である、CN(Common Name)のみ変更して署名をリクエストしています。

$ cp -p ../PL81N/openssl.cnf . $ export OPENSSL_CONF=.../openssl/nsca/PL81N_C/openssl.cnf $ openssl req -new -key PL81Nec.key -sha256 -out PL81Necreq.pem Enter pass phrase for PL81Nec.key: PL81Necpass You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]: State or Province Name (full name) [Sydney]: Locality Name (eg, city) []: Organization Name (eg, company) [Pulsar Integration PL81NA Inc.]: Organizational Unit Name (eg, section) []: www.sd.pulsarintegration.PL81Nec.com []:www.sd.pulsarintegration.PL81Nec.com Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: /home/mq_okada/openssl/nsca/PL81N_C: ls -l total 24 -rw------- .... 314 Aug 26 14:32 PL81Nec.key -rw-r--r-- .... 489 Aug 26 14:57 PL81Necreq.pem -rw------- .... 302 Aug 26 13:18 ecdsa.key -rw-rw-rw- .... 11147 Jul 21 19:09 openssl.cnf

*オプションの説明
req: このコマンドを使用して、証明書要求の作成、確認、操作を行う。
-new: 新しい証明書要求を生成します。
-key filename: 証明書要求で使う秘密鍵が格納されているファイル名を指定します。
-sha256: 証明書要求の署名に使うメッセージ・ダイジェスト・アルゴリズムに sha256 を指定します。
-out filename: 出力する証明書要求の出力先のファイル名。

作成した証明書要求を確認します。

$ openssl req -in PL81Necreq.pem -text -noout Certificate Request: Data: Version: 1 (0x0) Subject: C = AU, ST = Sydney, O = Pulsar Integration PL81NA Inc., CN = www.sd.pulsarintegration.PL81Nec.com Subject Public Key Info: Public Key Algorithm: id-ecPublicKey Public-Key: (256 bit) pub: 04:7f:09:47:e9:84:6e:b8:5f:7c:85:15:36:5b:a2: 46:9e:e5:e8:04:14:1e:00:d9:d1:f4:7c:d6:9a:d9: 22:08:11:b8:fe:72:de:89:a2:53:31:91:95:40:19: 99:2a:b8:c7:0b:6b:a1:0b:47:3f:ea:59:66:cd:2c: 6f:29:87:36:ce ASN1 OID: prime256v1 NIST CURVE: P-256 Attributes: a0:00 Signature Algorithm: ecdsa-with-SHA256 30:45:02:21:00:8e:56:af:07:50:6e:e3:76:cf:9e:8d:de:c9: 2f:13:c5:48:42:19:7d:ed:6d:fa:9a:59:85:32:6f:fe:fb:0c: 11:02:20:7d:c5:41:bf:e3:31:a5:47:e3:61:51:25:61:b9:91: 6c:d5:ed:33:6f:17:05:dd:7c:32:bd:e6:0b:8e:01:20:70


作成した証明書要求(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: 3 (0x3) Validity Not Before: Aug 26 07:24:50 2021 GMT Not After : Aug 24 07:24:50 2031 GMT Subject: countryName = JP stateOrProvinceName = Chiba organizationName = Pulsar Integration PL921WC Inc. commonName = www.pulsarintegration.PL921WCec.com X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: F8:70:D3:88:07:78:0E:6D:09:16:CB:88:7C:D3:0C:E3:C4:1B:FD:A0 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 24 07:24:50 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: 3 (0x3) Signature Algorithm: sha256WithRSAEncryption Issuer: C=JP, ST=Chiba, O=Pulsar Integration Inc., CN=www.pulsarintegration.com/emailAddress=support@pulsarintegration.com Validity Not Before: Aug 26 07:24:50 2021 GMT Not After : Aug 24 07:24:50 2031 GMT Subject: C=JP, ST=Chiba, O=Pulsar Integration PL921WC Inc., CN=www.pulsarintegration.PL921WCec.com Subject Public Key Info: Public Key Algorithm: id-ecPublicKey Public-Key: (521 bit) pub: 04:00:6e:40:03:ad:9c:2c:c8:13:b9:cd:12:26:02: a4:e7:3d:30:2a:c3:0f:42:db:ae:8e:3b:13:cd:fe: c2:9f:fc:07:9d:b2:f6:db:80:7d:42:ee:ce:58:7e: a1:4f:f8:fb:2e:04:9a:cb:1b:95:5b:c9:53:7a:33: 7d:1d:15:4b:11:19:ea:00:79:23:96:80:43:d2:11: 28:bc:e6:f0:0a:37:e7:12:c8:03:69:da:fb:59:67: c7:a3:81:27:11:3c:32:22:9b:80:6d:24:16:0d:db: 22:2b:67:6c:79:ee:e9:20:82:f1:60:1c:33:e0:82: 03:ab:6c:7c:82:83:c7:c5:c3:76:7e:9e:a4 ASN1 OID: secp521r1 NIST CURVE: P-521 X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: F8:70:D3:88:07:78:0E:6D:09:16:CB:88:7C:D3:0C:E3:C4:1B:FD:A0 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 ※CA証明書との関連でsha256WithRSAEncryptionとなる。 76:fc:9d:7e:49:bc:bb:4e:3b:0d:32:d1:57:b1:7f:c8:3c:12: 9a:d8:48:38:8b:fc:a9:e4:23:b9:a2:a9:ed:39:0f:f5:8a:76: d8:09:55:8a:9c:ea:22:42:cf:64:ab:b2:55:ae:5e:36:69:de: 3f:77:72:45:2f:85:75:1e:39:af:d8:e4:87:9f:68:65:f0:a3: 5b:ef:70:47:f7:e8:10:97:6a:3a:00:f8:75:ea:1f:6e:10:61: 81:ff:b8:03:cc:79:2e:40:4c:b4:ba:1d:af:b6:e8:14:2a:48: c2:f6:01:1c:08:79:e6:7f:d0:d5:fe:92:91:3d:16:cb:d9:f3: fc:97:b7:31:26:36:08:11:af:54:8a:34:ed:34:26:de:11:fd: 60:65:bc:1a:21:7e:48:23:dd:d3:2d:95:49:12:f3:94:28:64: cf:1b:fc:4d:cd:d1:f2:94:12:8e:9e:3e:24:8b:ab:d8:de:c8: bf:cd:fb:2e:a2:db:78:53:b0:e4:45:73:9e:41:ef:5f:1f:d6: 0b:9a:55:d5:c0:5a:ee:eb:24:e0:e3:e2:4c:22:18:79:36:25: d7:57:86:97:07:8e:38:e3:d6:f2:b4:96:34:a8:bf:99:1c:27: 1f:d7:96:01:5c:a9:1d:59:2a:bd:17:d6:b7:ee:f1:5e:d2:1e: af:97:c9:c1 -----BEGIN CERTIFICATE----- MIIDdTCCAl2gAwIBAgIBAzANBgkqhkiG9w0BAQsFADCBkTELMAkGA1UEBhMCSlAx DjAMBgNVBAgMBUNoaWJhMSAwHgYDVQQKDBdQdWxzYXIgSW50ZWdyYXRpb24gSW5j LjEiMCAGA1UEAwwZd3d3LnB1bHNhcmludGVncmF0aW9uLmNvbTEsMCoGCSqGSIb3 DQEJARYdc3VwcG9ydEBwdWxzYXJpbnRlZ3JhdGlvbi5jb20wHhcNMjEwODI2MDcy NDUwWhcNMzEwODI0MDcyNDUwWjB1MQswCQYDVQQGEwJKUDEOMAwGA1UECBMFQ2hp YmExKDAmBgNVBAoTH1B1bHNhciBJbnRlZ3JhdGlvbiBQTDkyMVdDIEluYy4xLDAq BgNVBAMTI3d3dy5wdWxzYXJpbnRlZ3JhdGlvbi5QTDkyMVdDZWMuY29tMIGbMBAG ByqGSM49AgEGBSuBBAAjA4GGAAQAbkADrZwsyBO5zRImAqTnPTAqww9C266OOxPN /sKf/AedsvbbgH1C7s5YfqFP+PsuBJrLG5VbyVN6M30dFUsRGeoAeSOWgEPSESi8 5vAKN+cSyANp2vtZZ8ejgScRPDIim4BtJBYN2yIrZ2x57ukggvFgHDPgggOrbHyC g8fFw3Z+nqSjezB5MAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wg R2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBT4cNOIB3gObQkWy4h80wzj xBv9oDAfBgNVHSMEGDAWgBQjC12IAQL1biv3Zz1no++rco1DojANBgkqhkiG9w0B AQsFAAOCAQEAdvydfkm8u047DTLRV7F/yDwSmthIOIv8qeQjuaKp7TkP9Yp22AlV ipzqIkLPZKuyVa5eNmneP3dyRS+FdR45r9jkh59oZfCjW+9wR/foEJdqOgD4deof bhBhgf+4A8x5LkBMtLodr7boFCpIwvYBHAh55n/Q1f6SkT0Wy9nz/Je3MSY2CBGv VIo07TQm3hH9YGW8GiF+SCPd0y2VSRLzlChkzxv8Tc3R8pQSjp4+JIur2N7Iv837 LqLbeFOw5EVznkHvXx/WC5pV1cBa7usk4OPiTCIYeTYl11eGlweOOOPW8rSWNKi/ mRwnH9eWAVypHVkqvRfWt+7xXtIer5fJwQ== -----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 2021/08/26 16:25 3,999 03.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 V 310824072450Z 03 unknown /C=JP/ST=Chiba/O=Pulsar Integration PL921WC Inc./CN=www.pulsarintegration.PL921WCec.com >type serial 04


証明書の検証

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


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

楕円曲線の場合は、Openssl/GSKit共、RSAの場合のようにmodulus(モジュロ: 公開鍵の法)で比較することはできない為、公開鍵のチェックのみ行います。 CA署名証明書(サーバー証明書)と証明書要求(CSR)の公開鍵の表示をチェックします。

※CA署名証明書(サーバー証明書) >openssl x509 -in newcerts\03.pem -text -noout ... Public Key Algorithm: id-ecPublicKey Public-Key: (256 bit) pub: 04:bc:67:85:9d:83:a1:00:73:aa:81:03:7f:46:54: 02:0d:3d:81:b0:47:c4:bc:58:16:0c:0b:92:75:e2: 0c:7d:28:73:7d:63:8c:a0:11:e5:c3:bc:af:13:58: 0d:ae:19:3b:71:7c:89:69:30:63:48:9c:c3:1b:e5: 24:70:3d:19:e0 ... ※証明書要求(CSR) openssl req -in ..\..\clientssl\key.csr -text -noout ... Public Key Algorithm: id-ecPublicKey Public-Key: (256 bit) pub: 04:bc:67:85:9d:83:a1:00:73:aa:81:03:7f:46:54: 02:0d:3d:81:b0:47:c4:bc:58:16:0c:0b:92:75:e2: 0c:7d:28:73:7d:63:8c:a0:11:e5:c3:bc:af:13:58: 0d:ae:19:3b:71:7c:89:69:30:63:48:9c:c3:1b:e5: 24:70:3d:19:e0 ...

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


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

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

※CA署名証明書(サーバー証明書) >openssl x509 -subject -issuer -noout -in newcerts\03.pem subject=C = JP, ST = Chiba, O = Pulsar Integration PL921WC Inc., CN = www.pulsarintegration.PL921WCec.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\03.pem newcerts\03.pem: OK ※OKと表示されること

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


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

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

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

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


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

この手順は、サーバー間接続クライアント接続のテスト時の「CA(root)証明書を鍵リポジトリーに追加する(GSKit)」で実施済みですので、未実施の場合はそれらを参照してください。


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

この手順も、サーバー間接続クライアント接続で実施した「個人証明書をクライアントの鍵リポジトリーに受信する(GSKit)」の手順と同じですので、それらの手順も参考にしてください。

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

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

>cd ...\clientssl >copy ..\openssl\winca\newcerts\03.pem PL921WCB.pem >runmqckm -cert -receive -file PL921WCB.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 PL921WCB -db key.kdb -pw PL921WCpass


SSL/TLS関連ファイルの作成と配置(Openssl)

この作業も、サーバー間接続で行った作業と同じですので、そちらも参考にしてください。
所定の手順で作成した関連ファイルをキューマネージャーのSSLKEYRアトリビュートで指定されている場所に配置します。


CAで署名したサーバー証明書と鍵ファイルを連結

CAで署名したサーバー証明書と鍵ファイルを一つのファイルに結合します。
下記の例では、CERTLABLにPL81NBを指定することが必要です。

$ pwd .../openssl/nsca/PL81N_C $ cp -p ../newcerts/02.pem . $ cat 02.pem PL81Nec.key > PL81NB.pem

結合したファイルの検証も行います。

$ openssl x509 -subject -issuer -noout -in PL81NB.pem subject=C = AU, ST = Sydney, O = Pulsar Integration PL81NA Inc., CN = www.sd.pulsarintegration.PL81Nec.com issuer=C = AU, ST = Sydney, O = Pulsar Integration SD Inc., CN = www.sd.pulsarintegration.com, emailAddress = support@sd.pulsarintegration.com

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

$ openssl verify -CAfile ../cacert.pem PL81NB.pem PL81NB.pem: OK

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


SSL/TLS通信で使用する全てのCA証明書を結合

この作業は、サーバー間接続で実施済みです。 未実施の場合は、そちらを参照してください。


パス・フレーズ格納ファイルの作成

MQ for HPE NonStop提供の amqrsslc コマンドを使用して、パス・フレーズ格納(stash)ファイルを作成します。

$ amqrsslc -s PL81NB Enter password for Keystore PL81NB : PL81Necpass Stashed the password in file PL81NB.sth または $ echo PL81Necpass | amqrsslc -s PL81NB Stashed the password in file PL81NB.sth $ ls -l *.sth .... 128 Aug 27 11:47 PL81NB.sth

*オプションの説明
-s : キー・ストアのパス


作成したファイルのSSLKeyリポジトリへの配置

キー・リポジトリの場所はキューマネージャーの SSLKEYR プロパティを確認します。

$ mqpcf qmgr -m PL81N SSLKEYR 1: QMNAME(PL81N) SSLKEYR(.../var/mqm/qmgrs/PL81N/ssl)

*オプションの説明
qmgr: キューマネージャー・プロパティの表示
SSLKEYR : SSLKEYRプロパティと必須プロパティのみを表示

$ cp -p PL81NB.pem <MQ Install Directory>/var/mqm/qmgrs/PL81N/ssl/ cp -p PL81NB.sth <MQ Install Directory>/var/mqm/qmgrs/PL81N/ssl/ ※ファイル ・パーミッションをチェックし、MQMグループにR/Wの権限があることを確認します。 cd <MQ Install Directory>/var/mqm/qmgrs/PL81N/ssl/ $ chmod 666 * <MQ Install Directory>/var/mqm/qmgrs/PL81N/ssl: ls -l total 43 -rw-rw-rw- 1 MQM.MANAGER MQM 6526 Aug 10 11:10 PL81NA.pem -rw-rw-rw- 1 MQM.MANAGER MQM 128 Aug 10 13:30 PL81NA.sth -rw-rw-rw- 1 MQM.MANAGER MQM 3888 Aug 27 11:35 PL81NB.pem -rw-rw-rw- 1 MQM.MANAGER MQM 128 Aug 27 11:47 PL81NB.sth -rw-rw-rw- 1 MQM.MANAGER MQM 128 Aug 10 13:30 Stash.sth -rw-rw-rw- 1 MQM.MANAGER MQM 6526 Aug 10 11:10 cert.pem -rw-rw-rw- 1 MQM.MANAGER MQM 4400 Aug 10 11:49 trust.pem

fig 13.1


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

チャネル定義構造体(MQCD)を使用した接続をテストしてみます。 CCDTを使用した接続テストの手順は、前回のクライアント接続での説明を参照してください。


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

サーバー側に下記コマンドでサーバー接続チャネル(SVRCONN)を作成します。

$ mqpcf mqsc -qm PL81N -s "def chl(PL81N.MQICHL.EC) chltype(svrconn) certlabl(PL81NB) SSLCIPH(ECDHE_ECDSA_AES_128_CBC_SHA256)"


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

MQCDに証明書ラベルとCipherSpecを指定します。 証明書ラベル(CertificateLabel)を指定するにはMQCDのバージョン11(MQCD_VERSION_11)以上を指定することが必要です。 環境変数は 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(xxxx9) -ch PL81N.MQICHL.EC -cl PL921WCB -cs ECDHE_ECDSA_AES_128_CBC_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.EC SECPROT SSLCERTI SSLCIPH SSLPEER
1: CHANNEL(PL81N.MQICHL.EC) CHLTYPE(SVRCONN) CONNAME(xxx.xxx.xxx.xx) CHLINSTYPE(CURRENT) SECPROT(TLSV12) SSLCERTI(E=support@pulsarintegration.com,CN=www.pulsarintegration.com,O=Pulsar Integration Inc.,ST=Chiba,C=JP) SSLCIPH(ECDHE_ECDSA_AES_128_CBC_SHA256) SSLPEER(SERIALNUMBER=03,CN=www.pulsarintegration.PL921WCec.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: もう一方のチャネルのクライアントの識別名を表示

このページの先頭へ

このページの先頭へ