MQTT クライアント用 ApsaraMQ は、サーバー証明書を使用して MQTT ブローカー用 ApsaraMQ を認証します。 サーバー証明書を購入または発行し、Alibaba Cloud Certificate Management Service で証明書をホストする必要があります。 このトピックでは、サーバー証明書を生成して使用する方法について説明します。
サーバー証明書を使用するプロセス
制限
サーバー証明書は、ApsaraMQ for MQTT Enterprise Platinum Edition インスタンスでのみ管理できます。
前提条件
認証局 (CA) 証明書を取得済みであること。
OpenSSL v1.1.1i 以降がインストールされていること。
ステップ 1: CA 証明書を使用してサーバー証明書を発行する
CA からサーバー証明書を購入するか、CA 証明書を使用してサーバー証明書を発行できます。 CA 証明書の取得方法については、「自己署名証明書」をご参照ください。
Rivest-Shamir-Adleman (RSA) CA 証明書
インストールされている OpenSSL ライブラリのパスに、構成ファイルを作成します。
server.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=mqtt-test.xxx.aliyuncs.com // 共通名server.crt.cfg という名前のファイルを作成します。 次のサンプルコードは、ファイルの内容の例を示しています。
説明[alt_names]セクションでカスタムドメイン名を指定できます。 カスタムドメイン名を使用する場合は、CNAME レコードを作成して、カスタムドメイン名を ApsaraMQ for MQTT が提供するドメイン名にマップする必要があります。カスタムドメイン名を使用しない場合は、
[alt_names]セクションに ApsaraMQ for MQTT が提供するドメイン名を指定します。 例:DNS.2=mqtt-test.cn-qingdao.aliyuncs.com。複数のリージョンにデプロイされた ApsaraMQ for MQTT インスタンスに同じサーバー証明書を使用する場合は、アスタリスク (*) ワイルドカード文字を使用してドメイン名を指定します。 例: DNS.1=*.mqtt.aliyuncs.com。
authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment, keyCertSign extendedKeyUsage = serverAuth, clientAuth subjectAltName = @alt_names [alt_names] DNS.1=*.mqtt.aliyuncs.com DNS.2=mqtt-test.cn-qingdao.aliyuncs.com
次のコマンドを実行して、サーバー証明書の秘密鍵と証明書署名要求 (CSR) ファイルを生成します。
Mac:
openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key -config <(cat server.csr.cfg)Windows:
openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key -config server.csr.cfg
次のコマンドを実行して、サーバー証明書の秘密鍵を PKCS#8 形式に変換します。
openssl pkcs8 -topk8 -nocrypt -in server.key -out server_pkcs8.key変換後、サーバー証明書の秘密鍵ファイルは
server_pkcs8.keyになります。cat server_pkcs8.keyコマンドを実行して、秘密鍵を表示できます。 秘密鍵の例:重要Certificate Management Service でサーバー証明書をホストする場合、生成されたサーバー証明書の秘密鍵をアップロードする必要があります。 詳細については、「ステップ 2: サーバー証明書をホストする」をご参照ください。
-----BEGIN PRIVATE KEY----- MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBALaDOET1McZD0hV/ ma1YlSZjim00rVwrdXefqOHXWEqm8/HxZ3iWmKN/jGWW1aAoYFRAg0CNar1eDap4 ***** ***** ***** PLX2WlXAXggKZvpozkig/J6klAN8pVvwM4BPgJDLk+hllM8MowOxlNjoHsI34lAQ g17SUS1ERIK+ -----END PRIVATE KEY-----次のコマンドを実行して、サーバー証明書を生成します。
openssl x509 -req -in server.csr -CA CA.crt -CAkey CA.key -CAcreateserial -out server.crt -days 500 -sha256 -extfile server.crt.cfg生成されたサーバー証明書は
server.crtです。サーバー証明書チェーンを生成します。
server_chain.crtという名前の空の証明書チェーンファイルを作成するには、次のコマンドを実行します。touch server_chain.crtサーバー証明書の内容を証明書チェーンファイルにコピーするには、次のコマンドを実行します。
cat server.crt >> server_chain.crtCA 証明書の内容を証明書チェーンファイルにコピーし、コピーした内容をサーバー証明書の内容に追加するには、次のコマンドを実行します。
cat CA.crt >> server_chain.crt
cat server_chain.crtコマンドを実行すると、次の形式で表示されるサーバー証明書チェーンの内容を表示できます。重要Certificate Management Service でサーバー証明書をホストする場合、生成されたサーバー証明書チェーンをアップロードする必要があります。 詳細については、「ステップ 2: サーバー証明書をホストする」をご参照ください。
-----BEGIN CERTIFICATE----- xxx The content of the server certificate. // サーバー証明書の内容 xxx -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- xxx The content of the CA certificate. // CA 証明書の内容 xxx -----END CERTIFICATE-----
Elliptic Curve Cryptography (ECC) CA 証明書
インストールされている OpenSSL ライブラリのパスに構成ファイルを作成します。
server.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=mqtt-test.xxx.aliyuncs.com // 共通名server.crt.cfg という名前のファイルを作成します。 次のサンプルコードは、ファイルの内容の例を示しています。
説明[alt_names]セクションでカスタムドメイン名を指定できます。 カスタムドメイン名を使用する場合は、CNAME レコードを作成して、カスタムドメイン名を ApsaraMQ for MQTT によって提供されるドメイン名にマップする必要があります。カスタムドメイン名を使用しない場合は、
[alt_names]セクションに ApsaraMQ for MQTT によって提供されるドメイン名を指定します。 例:DNS.2=mqtt-test.cn-qingdao.aliyuncs.com。複数のリージョンにデプロイされた ApsaraMQ for MQTT インスタンスに同じサーバー証明書を使用する場合は、アスタリスク (*) ワイルドカード文字を使用してドメイン名を指定します。 例: DNS.1=*.mqtt.aliyuncs.com。
authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment, keyCertSign extendedKeyUsage = serverAuth, clientAuth subjectAltName = @alt_names [alt_names] DNS.1=*.mqtt.aliyuncs.com DNS.2=mqtt-test.cn-qingdao.aliyuncs.com
server.key という名前のファイルを作成して、サーバー証明書の秘密鍵を保存します。
openssl ecparam -out server.key -name prime256v1 -genkeyserver.csr という名前のファイルを作成して、サーバー証明書の発行リクエストを送信します。
Mac:
openssl req -new -sha256 -nodes -out server.csr -key server.key -config <(cat server.csr.cfg)Windows:
openssl req -new -sha256 -nodes -out server.csr -key server.key -config server.csr.cfg
CA 証明書を使用してサーバー証明書を発行します。
openssl x509 -req -in server.csr -CA CA.crt -CAkey CA.key -CAcreateserial -out server.crt -days 500 -sha256 -extfile server.crt.cfg次のコマンドを実行して、サーバー証明書の秘密鍵を PKCS#8 形式に変換します。変換後、サーバー証明書の秘密鍵ファイルは
server_pkcs8.keyになります。openssl pkcs8 -topk8 -nocrypt -in server.key -out server_pkcs8.key重要Certificate Management Service でサーバー証明書をホストする場合、生成されたサーバー証明書の秘密鍵をアップロードする必要があります。 詳細については、「ステップ 2: サーバー証明書をホストする」をご参照ください。
サーバー証明書チェーンを生成します。
server_chain.crtという名前の空の証明書チェーンファイルを作成するには、次のコマンドを実行します。touch server_chain.crtサーバー証明書の内容を証明書チェーンファイルにコピーするには、次のコマンドを実行します。
cat server.crt >> server_chain.crtCA 証明書の内容を証明書チェーンファイルにコピーし、コピーされた内容をサーバー証明書の内容に追加するには、次のコマンドを実行します。
cat CA.crt >> server_chain.crt
重要Certificate Management Service でサーバー証明書をホストする場合、生成されたサーバー証明書チェーンをアップロードする必要があります。 詳細については、「ステップ 2: サーバー証明書をホストする」をご参照ください。
ステップ 2: サーバー証明書をホストする
ApsaraMQ for MQTT コンソール でサーバー証明書を表示して有効にするには、発行されたサーバー証明書を Certificate Management Service コンソール でホストする必要があります。
サーバー証明書は、RSA および ECC アルゴリズムをサポートしています。
カスタムドメイン名を使用する場合は、証明書にドメイン名を指定し、CNAME レコードを作成して、ドメイン名を ApsaraMQ for MQTT インスタンスのエンドポイントに解決します。
ApsaraMQ for MQTT コンソール にログインします。 左側のナビゲーションウィンドウで、インスタンスリスト をクリックします。
上部のナビゲーションバーで、管理するインスタンスが存在するリージョンを選択します。 [インスタンス] ページで、インスタンス名をクリックして インスタンスの詳細 ページに移動します。
左側のナビゲーションウィンドウで、 を選択します。 [サーバー証明書] ページの左上隅にある 証明書の作成 をクリックします。
システムによって Certificate Management Service コンソール の [SSL 証明書管理] ページにリダイレクトされます。
[SSL 証明書管理] ページで、[証明書のアップロード] をクリックします。 [証明書のアップロード] パネルでパラメーターを構成し、[OK] をクリックします。

証明書アルゴリズム: 国際的に認められたアルゴリズム を選択します。
証明書ファイル: ステップ 1: CA 証明書を使用してサーバー証明書を発行する で生成された
server_chain.crtサーバー証明書チェーンファイルをアップロードするか、サーバー証明書チェーンの内容をフィールドにコピーします。証明書キー: ステップ 1: CA 証明書を使用してサーバー証明書を発行する で生成された
server_pkcs8.key秘密鍵ファイルをアップロードするか、秘密鍵の内容をフィールドにコピーします。証明書チェーン: このフィールドに証明書チェーンファイルをアップロードしたり、証明書チェーンファイルの内容を指定したりしないことをお勧めします。 そうしないと、証明書の認証に失敗します。
ステップ 3: サーバー証明書を使用して ApsaraMQ for MQTT を有効にする
サーバー証明書を使用して ApsaraMQ for MQTT を有効にすると、クライアントは切断されます。 この操作を実行する際は注意してください。
証明書が無効な場合、ApsaraMQ for MQTT は一時的に使用できなくなります。
ApsaraMQ for MQTT コンソール にログインします。 左側のナビゲーションウィンドウで、インスタンスリスト をクリックします。
上部のナビゲーションバーで、管理するインスタンスが存在するリージョンを選択します。 [インスタンス] ページで、インスタンス名をクリックして インスタンスの詳細 ページに移動します。
左側のナビゲーションウィンドウで、 を選択します。
相互認証 タブをクリックします。 表示されるダイアログボックスで、サーバー証明書を選択し、Actions 列の サービスの開始 をクリックします。
[サービスの有効化] をクリックすると、ApsaraMQ for MQTT インスタンスが再起動されます。 再起動には約 5 ~ 10 分かかります。 インスタンスが再起動されると、クライアントはサーバー証明書を使用してブローカーを認証できます。
ApsaraMQ for MQTT を有効にすると、ポート 8883 で相互認証が有効になり、一方向認証が無効になります。
表示されるメッセージで注意事項を読み、OK をクリックします。
一方向認証に戻す場合は、単方向認証 タブをクリックします。 表示されるメッセージで、OK をクリックします。 その後、ブローカーが再起動するまで待ちます。