すべてのプロダクト
Search
ドキュメントセンター

ApsaraMQ for MQTT:SM 証明書の管理

最終更新日:May 10, 2026

概要

Message Queue for MQTT は、中国商用暗号アルゴリズム(SM2、SM3、および SM4)をサポートしています。このサービスは、2 つの標準に準拠しています。1 つはデュアル証明書型の SM 通信プロトコルである GB/T 38636-2020 Transport Layer Cryptography Protocol (TLCP)、もう 1 つは TLS 1.3 におけるシングル証明書型 SM モードを定義する RFC 8998 です。カスタム証明書機能を通じて SM 証明書をアップロード・利用することで、SM 機能を有効化できます。

前提条件

Tongsuo SM 実装ライブラリをインストールします。

注意事項

  • SM 機能をご利用になるには、チケットを送信して有効化をリクエストしてください。

  • SM 機能は、Message Queue for MQTT の Platinum Edition および Professional Edition インスタンスでのみサポートされています。

  • SM 機能は、以下のリージョンでご利用いただけます:中国 (杭州)、中国 (上海)、中国 (北京)、中国 (深セン)、中国 (ウランチャブ)、中国 (張家口)、中国 (広州)、シンガポール、ドイツ (フランクフルト)。

操作手順

  1. SM 機能の使用方法は、カスタム X.509 証明書による標準的な相互認証プロセスと類似しています。主な違いは、証明書生成時に使用するコマンドおよびアルゴリズムにあります。詳細な手順については、Tongsuo 公式ドキュメントの証明書使用ガイドをご参照ください。

  2. 証明書を生成します。

    1. この例では、Tongsuo が /home/admin/tongsuo にインストールされていることを前提とします:

    $ll /home/admin/tongsuo
    total 16
    drwxrwxr-x 2 admin admin 4096 Dec 16 14:28 bin
    drwxrwxr-x 3 admin admin 4096 Dec 16 14:28 include
    drwxrwxr-x 5 admin admin 4096 Dec 16 14:28 lib64
    drwxrwxr-x 5 admin admin 4096 Dec 16 14:28 ssl
    1. 証明書作成スクリプトおよび設定ファイルについては、Tongsuo 公式証明書ドキュメント内の mkcert.shca.conf、および subca.conf をご参照ください。mkcert.sh スクリプトを実行する前に、Tongsuo のインストールディレクトリを修正し、以下の環境変数を設定してください:

    export LD_LIBRARY_PATH=/home/admin/tongsuo/lib64:$LD_LIBRARY_PATH
    export PATH=/home/admin/tongsuo/bin:$PATH
    1. スクリプトを実行すると、以下の証明書が生成されます:

      $ll /home/admin/sm2-tlcp
      total 104
      -rw-rw-r-- 1 admin admin 3328 Jan 16 10:36 ca.cnf
      -rw-rw-r-- 1 admin admin  709 Jan 16 10:45 ca.crt
      -rw-rw-r-- 1 admin admin  513 Jan 16 10:45 ca.csr
      -rw------- 1 admin admin  241 Jan 16 10:45 ca.key
      -rw-rw-r-- 1 admin admin 1422 Jan 16 10:45 chain-ca.crt
      -rw-rw-r-- 1 admin admin 1409 Jan 16 13:55 client_enc.crt
      -rw-rw-r-- 1 admin admin  513 Jan 16 10:45 client_enc.csr
      -rw------- 1 admin admin  241 Jan 16 10:45 client_enc.key
      -rw-rw-r-- 1 admin admin 1413 Jan 16 13:55 client_sign.crt
      -rw-rw-r-- 1 admin admin  517 Jan 16 10:45 client_sign.csr
      -rw------- 1 admin admin  241 Jan 16 10:45 client_sign.key
      drwxrwxr-x 2 admin admin 4096 Jan 16 10:45 crl
      drwxrwxr-x 2 admin admin 4096 Jan 16 10:45 db
      -rw-rw-r-- 1 admin admin 2393 Jan 16 10:45 mkcert.sh
      drwxrwxr-x 2 admin admin 4096 Jan 16 10:45 newcerts
      drwxrwxr-x 2 admin admin 4096 Jan 16 10:45 private
      -rw-rw-r-- 1 admin admin  700 Jan 16 10:45 server_enc.crt
      -rw-rw-r-- 1 admin admin  513 Jan 16 10:45 server_enc.csr
      -rw------- 1 admin admin  241 Jan 16 10:45 server_enc.key
      -rw-rw-r-- 1 admin admin  700 Jan 16 10:45 server_sign.crt
      -rw-rw-r-- 1 admin admin  517 Jan 16 10:45 server_sign.csr
      -rw------- 1 admin admin  241 Jan 16 10:45 server_sign.key
      -rw-rw-r-- 1 admin admin 4047 Jan 16 10:37 subca.cnf
      -rw-rw-r-- 1 admin admin  713 Jan 16 10:45 subca.crt
      -rw-rw-r-- 1 admin admin  509 Jan 16 10:45 subca.csr
      -rw------- 1 admin admin  241 Jan 16 10:45 subca.key
  3. 発行されたサーバー側の署名証明書および暗号化用デュアル証明書を、Alibaba Cloud Certificate Management Service コンソールにアップロードします。

    1. 左側のナビゲーションウィンドウで、証明書管理 > SSL 証明書管理 V2.0 を選択します。アップロードされた証明書の管理 タブで、証明書のアップロード をクリックします。

    2. 証明書アルゴリズム で、SM2 アルゴリズム を選択します。

    3. 任意の 証明書名 を入力します。

    4. 証明書ファイル に、server_sign.crt ファイルをアップロードします。

    5. 証明書秘密鍵 に、server_sign.key ファイルをアップロードします。

    6. 暗号化された証明書 に、server_enc.crt ファイルをアップロードします。

    7. 暗号化された秘密鍵 に、server_enc.key ファイルをアップロードします。

  4. Message Queue for MQTT コンソールで CA 証明書(ca.crt)をアップロードします。

    1. 左側のナビゲーションウィンドウで、Certificate Management > CA Certificate を選択し、Register Certificate をクリックします。

    2. Verification Certificate をアップロードします。

    3. CA Certificate をアップロードします。

  5. クライアント証明書の構成については、コードデモをご参照ください。以下のスニペットは、主要な設定項目を示しています:

    MQTTAsync_SSLOptions ssl =MQTTAsync_SSLOptions_initializer;
    // CA 証明書およびクライアントの署名・暗号化証明書とキーを指定します。
    ssl.trustStore = "/home/admin/sm2-tlcp/chain-ca.crt";
    ssl.enable_ntls = 1;
    ssl.sign_cert_file = "/home/admin/sm2-tlcp/client_sign.crt";
    ssl.sign_key_file = "/home/admin/sm2-tlcp/client_sign.key";
    ssl.enc_cert_file = "/home/admin/sm2-tlcp/client_enc.crt";
    ssl.enc_key_file = "/home/admin/sm2-tlcp/client_enc.key";