ApsaraMQ for MQTT は、デバイス証明書を使用したクライアント認証をサポートしています。このトピックでは、CA 証明書を使用してデバイス証明書を発行する方法と、ApsaraMQ for MQTT コンソールでデバイス証明書を管理する方法 (照会、アクティブ化、非アクティブ化、削除を含む) について説明します。
背景情報
デバイス証明書とは、クライアントデバイスで使用するために、ルート CA 証明書によって発行されるデジタル証明書です。クライアントがブローカーに接続すると、ブローカーはデバイス証明書を使用してクライアントを認証します。認証に成功すると、クライアントとブローカーは証明書内の暗号化キーを使用して安全に通信できます。認証に失敗すると、ブローカーはクライアントからの接続要求を拒否します。
このトピックは、X.509 デバイス証明書の管理にのみ適用されます。AccessKey ID (AK) と AccessKey Secret (SK) からユーザー名とパスワードを生成するデバイスごとの一意な証明書 (device unique certificate) 認証を使用している場合は、デバイスごとの一意な証明書認証モードをご参照ください。
デバイスごとの一意な証明書のシナリオでは、まず公式ツールを使用してデバイス認証情報を生成し、その後 MQTTX や MQTT.fx などのクライアントを使用して接続します。接続時に、AK の作成時に生成された AccessKey ID と AccessKey Secret を入力します。AccessKey Secret (SK) は 1 回だけ表示されるため、事前に保存する必要があります。
デバイス証明書認証を使用するには、デバイス証明書を発行した CA 証明書を ApsaraMQ for MQTT ブローカーに登録する必要があります。詳細については、「CA証明書の登録」をご参照ください。
クライアントがデバイス証明書を使用して認証する場合、ブローカーは登録済みの CA 証明書を使用してデバイス証明書を検証します。検証に成功すると、クライアントは認証され、システムはデバイス証明書をブローカーに自動的に登録します。
制限事項
-
デバイス証明書の管理をサポートしているのは、Platinum Edition インスタンスと Professional Edition インスタンスのみです。
-
ApsaraMQ for MQTT ブローカーに登録されているデバイス証明書のみ管理できます。
-
デバイス証明書のシリアル番号は一意である必要があります。
前提条件
-
CA 証明書。
-
OpenSSL v1.1.1i 以降。
CA証明書を使用したデバイス証明書の発行
このセクションでは、自己署名 CA 証明書を例として、デバイス証明書を発行する方法を示します。自己署名 CA 証明書の生成方法については、「自己署名CA証明書の作成」をご参照ください。
デバイス証明書の生成
RSAアルゴリズム証明書
-
設定ファイルを準備します。
-
次の内容で client.csr.cfg という名前のファイルを作成します。
説明[dn]セクションの内容を要件に合わせて変更します。[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 -
次の内容で client.crt.cfg という名前のファイルを作成します。
authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment, keyCertSign
-
-
デバイス証明書のプライベートキーと証明書署名リクエスト (CSR) ファイルを生成します。
-
macOS:
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
-
-
デバイス証明書を生成します。
openssl x509 -req -in client.csr -CA CA.crt -CAkey CA.key -CAcreateserial -out client.crt -days 500 -sha256 -extfile client.crt.cfg
ECCアルゴリズム証明書
-
設定ファイルを準備します。
-
次の内容で client.csr.cfg という名前のファイルを作成します。
説明[dn]セクションの内容を要件に合わせて変更します。[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 -
次の内容で client.crt.cfg という名前のファイルを作成します。
authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment, keyCertSign
-
-
デバイス証明書のプライベートキー (client.key) を生成します。
openssl ecparam -out client.key -name prime256v1 -genkey -
デバイス証明書の CSR ファイル (client.csr) を生成します。
-
macOS:
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
-
-
デバイス証明書を生成します。
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重要プログラムから接続する場合は、
deviceKeyPathパラメーターに client.key ではなく client_pkcs8.key のパスを設定します。
デバイス証明書チェーンの生成
-
client_chain.crtという名前の空の証明書チェーンファイルを作成します。touch client_chain.crt -
デバイス証明書の内容を証明書チェーンファイルにコピーします。
cat client.crt >> client_chain.crt -
CA 証明書の内容を証明書チェーンファイルに追加します。
cat CA.crt >> client_chain.crt
cat client_chain.crt コマンドを実行して、デバイス証明書チェーンの内容を確認します。
ブローカーに接続するには、デバイス証明書と発行元の CA 証明書から証明書チェーンを生成します。
証明書チェーンの生成では、複数の証明書の内容を連結します。子証明書、親証明書の順で内容を連結します。
デバイス証明書の照会
特定のインスタンスに登録されているすべてのデバイス証明書を表示するか、シリアル番号で特定の証明書を検索できます。
ApsaraMQ for MQTT コンソール にログインします。左側のナビゲーションウィンドウで、インスタンスリスト をクリックします。
上部のナビゲーションバーで、管理するインスタンスが存在するリージョンを選択します。[インスタンス] ページで、インスタンス名をクリックして インスタンスの詳細 ページに移動します。
-
ナビゲーションペインでを選択します。
[Device Certificate] ページには、ブローカーに登録されているすべてのデバイス証明書が表示されます。
-
デバイス証明書リストの上にある検索ボックスに、デバイス証明書または CA 証明書のシリアル番号を入力して、特定の証明書を検索します。
-
デバイス証明書のシリアル番号を入力すると、その証明書が返されます。
-
CA 証明書のシリアル番号を入力すると、その CA 証明書によって発行され、ブローカーに登録されているすべてのデバイス証明書が返されます。
-
デバイス証明書のアクティブ化または非アクティブ化
証明書をアクティブ化または非アクティブ化することで、証明書のステータスを変更できます。証明書のステータスは [アクティブ] または [非アクティブ] のいずれかです。デフォルトでは、デバイス証明書はブローカーに登録されると [アクティブ] になります。
-
証明書が [アクティブ] の場合:証明書を一時的に無効にするには、非アクティブ化します。証明書を非アクティブ化すると使用できなくなり、ステータスが [非アクティブ] に変わります。
-
証明書が [非アクティブ] の場合:証明書を復元するには、アクティブ化します。アクティブ化するとステータスが [アクティブ] に変わります。
デバイス証明書リストで管理する証明書を見つけ、操作 列で [非アクティブ化] または [アクティブ化] をクリックします。
デバイス証明書の削除
デバイス証明書を削除すると、ブローカーから登録情報が削除されます。この操作では、実際の証明書ファイルは削除されません。
デバイス証明書を削除した後に、クライアントがその証明書を使用して認証を試行し、関連付けられている CA 証明書が引き続き有効な場合、ブローカーはデバイス証明書を自動的に再登録し、認証は成功します。
-
デバイス証明書リストで削除する証明書を見つけ、操作 列で Delete をクリックします。
-
確認ダイアログボックスで OK をクリックします。
よくある質問
デバイスごとの一意な証明書認証
ApsaraMQ for MQTT Basic Edition はデバイスごとの一意な証明書認証をサポートしていますか?
はい。Basic Edition インスタンスはデバイスごとの一意な証明書認証をサポートしています。このモードでは、AccessKey ID と AccessKey Secret を使用して、クライアント認証用のユーザー名とパスワードを生成します。
DeviceAccessKey は Alibaba Cloud のプライマリアカウントの AccessKey と同じですか?複数のデバイスで同じ DeviceAccessKey を共有できますか?
いいえ。DeviceAccessKey は、デバイスごとに個別に発行される独立した認証情報です。プライマリアカウントの AccessKey ではありません。異なるデバイスで DeviceAccessKey を共有することはできません。DeviceAccessKey を共有すると認証の競合を引き起こす可能性があり、セキュリティ分離の原則にも反します。
デバイスごとの一意な証明書モードで Username または Password の形式が正しくないために接続に失敗した場合はどうすればよいですか?
ユーザー名とパスワードの形式を確認して修正してください。デバイスごとの一意な証明書モードでは、Username と Password に厳格な形式要件があります。具体的な形式要件については、デバイスごとの一意な証明書認証モードをご参照ください。
デバイスごとの一意な証明書モードで生成されたユーザー名がクライアントにとって長すぎる場合はどうすればよいですか?
トークン認証モードへの切り替えを検討してください。トークンモードでは、より短いユーザー名が生成され、長いユーザー名をサポートしていないクライアントとの互換性の問題を解消できます。
Serverless Editionとカスタム認証
MQTT Serverless Edition は OpenAPI を介してどのように認証パラメーターを取得できますか?
OpenAPI Explorer を使用して API を呼び出し、認証パラメーターを取得します。詳細については、デバイスごとの一意な証明書認証モードをご参照ください。
共有認証情報を使用しているときに、一部の Device ID が "unauthorized" エラーで接続に失敗する場合はどうすればよいですか?
次の手順でトラブルシューティングを実施してください。
インスタンスタイプを確認します。複数のデバイス間で共有認証情報を使用できるのは、Professional Edition または Platinum Edition インスタンスのみです。
認証設定を確認します。AddCustomAuthIdentity API を呼び出して、カスタム認証IDを正しく生成し、追加していることを確認してください。
接続を検証します。生成した認証情報をクライアントに設定し、接続テストを実施します。
それでも接続に失敗する場合は、ApsaraMQ for MQTT コンソールでクライアント ID の接続履歴を照会し、根本原因の特定に役立ててください。