ApsaraMQ for MQTT は、X.509 証明書ベースの認証をサポートしており、TLS ハンドシェイク中にブローカーとクライアント間の ID を検証します。接続が確立される前に証明書が交換されるため、不正なアクセスを防ぐことができます。
| モード | 検証 | インスタンス要件 |
|---|---|---|
| 一方向認証 | クライアントはサーバー証明書を使用してブローカーの ID を検証します。 | すべてのインスタンスタイプ |
| 相互認証 | 双方が互いを検証します。クライアントはサーバー証明書をチェックし、ブローカーはデバイス証明書をチェックします。 | Enterprise Platinum Edition のみ |
一方向認証
一方向認証では、クライアントは TLS ハンドシェイク中にブローカーのサーバー証明書を検証します。クライアントが接続を開始すると、ブローカーは自動的にサーバー証明書を提示します。証明書の検証に成功すると、接続が確立されます。
一方向認証への切り替え
この手順は、Enterprise Platinum Edition インスタンスにのみ適用されます。他のすべてのインスタンスタイプは、デフォルトで一方向認証をサポートしています。
ApsaraMQ for MQTT コンソールにログインします。左側のナビゲーションウィンドウで、[インスタンス] をクリックします。
上部のナビゲーションバーで、インスタンスが存在するリージョンを選択します。[インスタンス] ページで、インスタンス名をクリックして [インスタンス詳細] ページに移動します。
左側のナビゲーションウィンドウで、[証明書] > [サーバー証明書] を選択します。
[一方向認証] をクリックします。確認メッセージを読み、[OK] をクリックします。ブローカーが再起動するまで待ちます。
サーバー証明書検証のサンプルコード
| 言語 | サンプルコード |
|---|---|
| Java | mqtt.demo.java |
| Python | mqtt.demo.python |
| C | mqtt.demo.c |
| .NET | mqtt.demo.net |
| JavaScript | mqtt.demo.javascript |
| iOS | mqtt.demo.ios |
相互認証
相互認証は、検証レイヤーを追加します。クライアントがブローカーのサーバー証明書を検証することに加えて、ブローカーもクライアントのデバイス証明書を検証します。これにより、不正なデバイスがブローカーに接続するのを防ぎます。
相互認証には Enterprise Platinum Edition インスタンスが必要です。
証明書タイプ
相互認証では、3 種類の証明書を使用します。
| 証明書 | 役割 | 管理 |
|---|---|---|
| CA 証明書 | 信頼のルート。サーバー証明書、デバイス証明書、検証証明書を発行します。 | ブローカーに登録します。 |
| サーバー証明書 | ブローカーを識別します。 | Certificate Management Service でホストし、インスタンスを再起動して適用します。 |
| デバイス証明書 | 各クライアントを識別します。グローバルに一意である必要があります。 | 初回接続時に自動登録されます。 |
仕組み
クライアントが接続すると、クライアントは TLS 1.2 に基づいてブローカーと対話します。ブローカーは、次のプロセスを通じてデバイス証明書を検証します。
クライアントは TCP 接続を開始し、MQTT プロトコルを介してデバイス証明書をブローカーに送信します。
ブローカーは、デバイス証明書が登録されているかどうかを確認します。
登録済み:ブローカーは証明書のステータスを確認します。有効化されている場合、ブローカーは証明書の検証に進みます (ステップ 5)。有効化されていない場合、接続は拒否されます。
未登録:ブローカーはデバイス証明書を CA 証明書と照合しようとします (ステップ 3)。
ブローカーは、デバイス証明書に対応する CA 証明書を検索します。
CA 証明書が見つかり、登録済み:ブローカーは CA 証明書のステータスを確認します (ステップ 4)。
CA 証明書が見つからない:接続は拒否されます。
ブローカーは、CA 証明書が有効化されているかどうかを確認します。
有効化済み:ブローカーはデバイス証明書の検証に進みます (ステップ 5)。
有効化されていない:接続は拒否されます。
ブローカーは、登録済みの CA 証明書に対してデバイス証明書を検証します。
検証に成功した場合:クライアントが認証されます (ステップ 6)。
検証に失敗した場合:接続は拒否されます。
認証が成功します。クライアントは接続し、メッセージの送受信を開始できます。
初回接続時、ブローカーは自動的にデバイス証明書を対応する CA 証明書と照合して登録します。その後の接続では、CA の照合ステップをスキップし、デバイス証明書を直接検証します。
相互認証の設定
相互認証は 3 つのステップで設定します。
ステップ 1:CA 証明書をブローカーに登録します。
認証局 (CA) に申請するか、独自に作成して CA 証明書を取得します。次に、それを ApsaraMQ for MQTT ブローカーに登録します。CA 証明書は、デバイス証明書、サーバー証明書、および検証証明書を発行できます。
詳細については、「CA 証明書の管理」をご参照ください。
ステップ 2:サーバー証明書を発行してデプロイします。
CA 証明書からサーバー証明書を発行し、それを Certificate Management Service でホストし、ApsaraMQ for MQTT インスタンスを再起動して証明書を有効にします。
詳細については、「サーバー証明書の管理」をご参照ください。
ステップ 3:デバイス証明書を発行します。
CA 証明書からデバイス証明書を発行します。各デバイス証明書はグローバルに一意である必要があります。使用する前に、デバイス証明書をブローカーに登録します。
初回接続時、ブローカーは自動的にデバイス証明書を対応する CA 証明書と照合して登録します。その後の接続では、CA の照合ステップをスキップし、デバイス証明書を直接検証します。
詳細については、「CA 証明書を使用してデバイス証明書を発行する」をご参照ください。
デバイス証明書検証のサンプルコード
| 言語 | サンプルコード |
|---|---|
| Java | mqtt.bissl.demo.java |
| Python | mqtt.ssl.mode.demo.python |
| C | mqtt.ssl.demo.c |
| .NET | mqtt.ssl.mode.demo.net |
| JavaScript | mqtt.ssl.demo.javascript |
| iOS | mmqtt.ssl.demo.ios |
API オペレーション
CA 証明書の管理
デバイス証明書の管理
コンソール操作
購入または自己発行したサーバー証明書を Certificate Management Service でホストし、それを使用して ApsaraMQ for MQTT インスタンスを初期化します。詳細については、「サーバー証明書の管理」をご参照ください。
CA 証明書の登録、有効化、無効化、または削除を行います。詳細については、「CA 証明書の管理」をご参照ください。
デバイス証明書の照会、有効化、無効化、または削除を行います。詳細については、「デバイス証明書の管理」をご参照ください。