ApsaraMQ for MQTT では、証明機関(CA)が発行した X.509 デバイス証明書を用いてクライアント接続を認証します。本ガイドでは、OpenSSL を使用した RSA および ECC デバイス証明書の生成方法、証明書チェーンの構築方法、およびコンソールにおける証明書ライフサイクル操作の実施方法について説明します。
仕組み
デバイス証明書とは、CA のルート証明書がクライアントデバイスに対して発行するデジタル証明書です。クライアントが ApsaraMQ for MQTT ブローカーに接続すると、ブローカーはそのデバイス証明書を事前に登録済みの CA 証明書と照合して検証します。
検証に成功した場合: クライアントとブローカーは、デバイス証明書に含まれる秘密鍵を用いて暗号化された通信チャネルを確立します。
検証に失敗した場合: ブローカーは接続を拒否します。
有効なデバイス証明書を用いたクライアントの初回接続時、発行元の CA 証明書が既に登録済みであることを条件として、ブローカーは自動的に当該デバイス証明書を登録します。CA 証明書の登録手順については、「CA 証明書の登録」をご参照ください。
制限事項
デバイス証明書の管理機能は、ApsaraMQ for MQTT Enterprise Platinum Edition インスタンスでのみ利用可能です。
コンソールから管理可能なのは、ApsaraMQ for MQTT ブローカーに登録済みのデバイス証明書のみです。
各デバイス証明書には、一意のシリアル番号が必要です。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
CA 証明書。自己署名 CA 証明書の生成手順については、「自己署名 CA 証明書」をご参照ください。
OpenSSL v1.1.1i 以降がインストール済みであること。
デバイス証明書の生成
ApsaraMQ for MQTT では、RSA および楕円曲線暗号(ECC)のデバイス証明書の両方をサポートしています。いずれも同じ構成ファイルを使用しますが、秘密鍵および証明書署名要求(CSR)の生成には異なる OpenSSL コマンドが必要です。
構成ファイルの作成
証明書の生成に先立ち、2 つの構成ファイルを作成します。
client.csr.cfg — 証明書の件名(Subject)フィールドを定義します。
[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
[dn]
C=CN
ST=ZJ
L=HZ
O=ALI
OU=MQTT
emailAddress=xxx@xxx
CN=client-test[dn] 内のフィールドを、ご利用の組織に合わせて変更してください。
client.crt.cfg — 証明書の拡張属性を定義します。
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment, keyCertSignRSA デバイス証明書の生成
秘密鍵および CSR を生成します。
macOS / Linux の場合:
openssl req -new -sha256 -nodes -out client.csr -newkey rsa:2048 -keyout client.key -config <(cat client.csr.cfg)Windows の場合:
openssl req -new -sha256 -nodes -out client.csr -newkey rsa:2048 -keyout client.key -config client.csr.cfg
CA 証明書でデバイス証明書に署名します。
openssl x509 -req -in client.csr -CA CA.crt -CAkey CA.key -CAcreateserial -out client.crt -days 500 -sha256 -extfile client.crt.cfg
ECC デバイス証明書の生成
ECC 秘密鍵を生成します。
openssl ecparam -out client.key -name prime256v1 -genkeyCSR を生成します。
macOS / Linux の場合:
openssl req -new -sha256 -nodes -out client.csr -key client.key -config <(cat client.csr.cfg)Windows の場合:
openssl req -new -sha256 -nodes -out client.csr -key client.key -config client.csr.cfg
CA 証明書でデバイス証明書に署名します。
openssl x509 -req -in client.csr -CA CA.crt -CAkey CA.key -CAcreateserial -out client.crt -days 500 -sha256 -extfile client.crt.cfg秘密鍵を PKCS#8 形式に変換します。
openssl pkcs8 -topk8 -nocrypt -in client.key -out client_pkcs8.key
コード内でクライアントをブローカーに接続する際は、deviceKyPath パラメーターに秘密鍵の**ファイルパス**を指定してください。秘密鍵の内容自体を指定しないでください。
証明書チェーンの構築
クライアントをブローカーに接続するには、証明書チェーンが必要です。このチェーンは、デバイス証明書とその発行元 CA 証明書を連結したものであり、先頭にデバイス証明書を配置します。
空の証明書チェーンファイルを作成します。
touch client_chain.crtデバイス証明書を追加します。
cat client.crt >> client_chain.crtデバイス証明書の後に CA 証明書を追加します。
cat CA.crt >> client_chain.crt
チェーンの検証を行うには、以下のコマンドを実行します。
cat client_chain.crt出力結果では、まずデバイス証明書のブロックが表示され、その後に CA 証明書のブロックが続きます。
証明書チェーンでは、子証明書は常に親証明書より前に配置されます。CA に中間証明書が存在する場合は、最も具体的なもの(デバイス)から最も一般的なもの(ルート CA)へと順に追加してください。
デバイス証明書のクエリ
ApsaraMQ for MQTT コンソール にログインします。左側ナビゲーションウィンドウで、インスタンス をクリックします。
上部ナビゲーションバーで、対象インスタンスのリージョンを選択します。インスタンス名をクリックして、インスタンスの詳細 ページを開きます。
左側ナビゲーションウィンドウで、証明書 > デバイス証明書 を選択します。デバイス証明書 ページには、登録済みのすべてのデバイス証明書が一覧表示されます。
検索ボックスにシリアル番号を入力して結果をフィルターします。
検索条件 結果 デバイス証明書のシリアル番号 当該シリアル番号で識別される特定の証明書が返されます。 CA 証明書のシリアル番号 当該 CA によって発行され、ブローカーに登録済みのすべてのデバイス証明書が返されます。
デバイス証明書の有効化または登録解除
デバイス証明書には「有効」および「無効」の 2 つの状態があります。デフォルトでは、ブローカーによる登録時に証明書は「有効」状態になります。
| 現在の状態 | 操作 | 結果 |
|---|---|---|
| 有効 | 登録解除 | 証明書は「無効」状態になり、当該証明書を使用するクライアントは接続できなくなります。 |
| 無効 | 有効化 | 証明書は「有効」状態に戻り、再び接続に使用可能になります。 |
デバイス証明書一覧から対象の証明書を見つけ、操作 列の 登録解除 または 有効化 をクリックします。
デバイス証明書の削除
デバイス証明書を削除すると、ブローカーのストレージから当該証明書のレコードが完全に削除されます。
クライアントが後日、削除済みのデバイス証明書を用いて接続し、かつ関連付けられた CA 証明書が依然として有効である場合、ブローカーは当該デバイス証明書を自動的に再登録します。
デバイス証明書リストで、対象の証明書を見つけ、[操作] 列の [削除] をクリックします。
確認ダイアログボックスで、OK をクリックします。