Skip to content

Dedicated FlexプランでのTLS/SSL設定

EMQX Dedicated Flexエディションではカスタマイズされた証明書検証を推奨しており、一方向/双方向TLS/SSLの両方に対応しています。本節では、証明書検証の概要と、デプロイメントでのTLS/SSLプロトコルの設定方法および設定の検証方法について説明します。

以下の表は、一方向認証と双方向認証モードにおける各種証明書の要件をまとめたものです。

認証モード自己署名証明書サーバー証明書証明書チェーン秘密鍵クライアントCA証明書
一方向認証必須必須必須不要
双方向認証必須必須必須必須

証明書の要件

  • 証明書には暗号化アルゴリズムと鍵長が指定されている必要があります。EMQX Cloudは以下のアルゴリズムをサポートしています:

    • 1024ビットRSA(RSA_1024)
    • 2048ビットRSA(RSA_2048)
    • 256ビットECDSA(ECC)
    • 384ビットECDSA(ECC)
  • 証明書(証明書チェーンを含む場合あり):EMQX Cloudはx509形式の証明書アップロードをサポートしています。証明書ファイル(.crtまたは.pem)と関連する証明書チェーンファイルを1つにまとめてアップロードしてください。証明書が認証局発行の場合、正しく認識されるよう証明書チェーンを含めることが重要です。

  • 証明書は有効でなければなりません。有効期間の開始および終了の60日前以内の証明書はインポートできません。

  • 証明書、秘密鍵、証明書チェーンはすべてPEMエンコードである必要があります。

  • 秘密鍵はパスワードなしである必要があります。

  • 秘密鍵はPKCS#1およびPKCS#8をサポートします。

  • 証明書の暗号化アルゴリズムは署名CAの暗号化アルゴリズムと一致している必要があります。例えば、署名CAの鍵タイプがRSAの場合、証明書の鍵タイプもRSAでなければなりません。

  • フォーマット例:

    • 証明書フォーマット
    bash
    -----BEGIN CERTIFICATE-----
    Base64でエンコードされた証明書
    -----END CERTIFICATE-----
    • 秘密鍵フォーマット
    bash
    -----BEGIN (RSA/EC) PRIVATE KEY-----
    Base64でエンコードされた秘密鍵
    -----END (RSA/EC) PRIVATE KEY-----

一方向TLS/SSLの設定

以下の手順では、EMQX Cloudコンソールで一方向TLS/SSLを設定し、TLS/SSL設定済みのクライアント接続をテストする方法を案内します。また、各ステップを動画で確認したい場合は一方向TLS/SSLチュートリアルをご覧ください。

  1. EMQX Cloudコンソールにログインします。
  2. デプロイメントの概要ページで、+TLS/SSL設定ボタンをクリックして証明書を設定します。ファイルをアップロードするか、証明書の内容を直接入力できます。
    • TLS/SSLタイプ:一方向(クライアントのみがサーバー証明書を検証)を選択します。
    • 証明書および証明書チェーン:カスタムサーバー証明書(証明書発行時に第三者機関が提供する証明書チェーンを含む)。
    • 証明書秘密鍵:秘密鍵を入力します。
  3. すべての項目を入力後、確認をクリックします。デプロイメントの概要ページにて、TLS/SSL設定に証明書情報が表示されます。

MQTTXクライアントで一方向TLSをテスト

テスト前に認証情報を作成していることを確認してください。詳細は認証を参照してください。MQTTXクライアントを使ってEMQX Cloudに接続し、TLS/SSL設定をテストできます。

  1. MQTTXクライアントで新規接続を作成します。

    一般セクションに以下の情報を入力します:

    • 名前:接続名を入力します。

    • クライアントID:クライアントIDはランダム生成されます。更新ボタンで再生成可能です。

    • ホスト:ドロップダウンリストからプロトコルを選択し、デプロイメントの接続アドレスとポートを入力します。

      • MQTT over TLSの場合、mqtts://とポート8883を選択します。
      • WebSocket over TLSの場合、wss://とポート8084を選択します。
    • ユーザー名パスワード:作成済みの認証情報を入力します。

    • SSL/TLS:トグルスイッチをクリックしてSSL/TLSを有効にします。

    • SSLセキュア:トグルスイッチをクリックしてSSLセキュアを有効にします。

    • 証明書:必要に応じて証明書を選択します。

      • CA認証局発行の証明書の場合はCA署名サーバーを選択します。
      • 自己署名証明書の場合は自己署名を選択し、自己署名サーバー側CA証明書を提供します。自己署名TLS/SSL証明書の作成方法は自己署名TLS/SSL証明書の作成を参照してください。
  2. 接続をクリックします。

mqttx_tls

双方向TLS/SSLの設定

以下の手順では、EMQX Cloudコンソールで双方向TLS/SSLを設定し、TLS/SSL設定済みのクライアント接続をテストする方法を案内します。また、各ステップを動画で確認したい場合は双方向TLS/SSLチュートリアルをご覧ください。

  1. EMQX Cloudコンソールにログインします。
  2. デプロイメントの概要ページで、+TLS/SSL設定ボタンをクリックして証明書を設定します。ファイルをアップロードするか、証明書の内容を直接入力できます。
    • TLS/SSLタイプ:双方向(クライアントとサーバーがお互いの証明書を検証)を選択します。
    • 証明書および証明書チェーン:カスタムサーバー証明書(証明書発行時に第三者機関が提供する証明書チェーンを含む)。
    • 証明書秘密鍵:秘密鍵を入力します。
    • クライアントCA証明書:双方向を選択した場合、クライアントCA証明書を提供する必要があります。
  3. すべての項目を入力後、確認をクリックします。デプロイメントの概要ページにて、TLS/SSL設定に証明書情報が表示されます。

MQTTXクライアントで双方向TLSをテスト

テスト前に認証情報を作成していることを確認してください。詳細は認証を参照してください。MQTTXクライアントを使ってEMQX Cloudに接続し、TLS/SSL設定をテストできます。

  1. MQTTXクライアントで新規接続を作成します。

    一般セクションに以下の情報を入力します:

    • 名前:接続名を入力します。

    • クライアントID:クライアントIDはランダム生成されます。更新ボタンで再生成可能です。

    • ホスト:ドロップダウンリストからプロトコルを選択し、デプロイメントの接続アドレスとポートを入力します。

      • MQTT over TLSの場合、mqtts://とポート8883を選択します。
      • WebSocket over TLSの場合、wss://とポート8084を選択します。
    • ユーザー名パスワード:作成済みの認証情報を入力します。

    • SSL/TLS:トグルスイッチをクリックしてSSL/TLSを有効にします。

    • SSLセキュア:トグルスイッチをクリックしてSSLセキュアを有効にします。

    • 証明書:必要に応じて証明書を選択します。

      • サーバー側CAがCA認証局発行の場合は自己署名を選択し、CAファイル欄に証明書を入力します。自己署名TLS/SSL証明書の作成方法は自己署名TLS/SSL証明書の作成を参照してください。
      • 自己署名サーバー側証明書の場合は自己署名を選択し、自己署名サーバー側CA証明書を提供します。
      • 双方向TLSではクライアント証明書ファイルとクライアント秘密鍵ファイルも入力する必要があります。
  2. 接続をクリックします。

mqttx_tls

自己署名TLS/SSL証明書の作成

以下の手順では、自己署名TLS/SSL証明書の作成方法を案内します。動画で確認したい場合は自己署名TLS/SSL証明書作成チュートリアルをご覧ください。

前提条件

OpenSSLがインストールされていることを確認してください。

サーバー側CA証明書の生成

以下のコマンドでサーバー側CA証明書を生成できます。subjは実際の用途に合わせて調整してください。

bash
openssl req \
    -new \
    -newkey rsa:2048 \
    -days 365 \
    -nodes \
    -x509 \
    -subj "/C=CN/O=EMQ Technologies Co., Ltd/CN=EMQ CA" \
    -keyout server-ca.key \
    -out server-ca.crt

サーバー側証明書の作成

  1. サーバー側秘密鍵server.keyを生成します。
bash
openssl genrsa -out server.key 2048
  1. openssl.cnfファイルを作成します。IP.1またはDNS.1のアドレスをデプロイメントの接続アドレスに置き換えてください。
cat << EOF > ./openssl.cnf
[policy_match]
countryName             = match
stateOrProvinceName     = optional
organizationName        = optional
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional

[req]
default_bits       = 2048
distinguished_name = req_distinguished_name
req_extensions     = req_ext
x509_extensions    = v3_req
prompt             = no

[req_distinguished_name]
commonName          = Server

[req_ext]
subjectAltName = @alt_names

[v3_req]
subjectAltName = @alt_names

[alt_names]
# EMQXデプロイメント接続アドレス
# IP.1 = <IP接続アドレス>
DNS.1 = <ドメイン接続アドレス>
EOF
  1. サーバー側証明書要求ファイルserver.csrを生成します。
bash
openssl req -new -key server.key -config openssl.cnf -out server.csr
  1. CA証明書でサーバー側証明書を署名し、server.crtを作成します。
bash
openssl x509 -req \
    -days 365 \
    -sha256 \
    -in server.csr \
    -CA server-ca.crt \
    -CAkey server-ca.key \
    -CAcreateserial -out server.crt \
    -extensions v3_req -extfile openssl.cnf
  1. サーバー側証明書情報を確認します。
bash
openssl x509 -noout -text -in server.crt
  1. 証明書を検証します。
bash
openssl verify -CAfile server-ca.crt server.crt

クライアント証明書の作成

双方向認証の場合、まずクライアントCA証明書を生成する必要があります。

クライアントCA証明書の生成

以下のコマンドでクライアントCA証明書を生成できます。subjは実際の用途に合わせて調整してください。

bash
openssl req \
    -new \
    -newkey rsa:2048 \
    -days 365 \
    -nodes \
    -x509 \
    -subj "/C=CN/O=EMQ Technologies Co., Ltd/CN=EMQ CA" \
    -keyout client-ca.key \
    -out client-ca.crt
  1. クライアント側秘密鍵client.keyを生成します。
bash
openssl genrsa -out client.key 2048
  1. クライアント側証明書要求ファイルclient.csrを生成します。
bash
openssl req -new -key client.key -out client.csr -subj "/CN=Client"
  1. CA証明書でクライアント側証明書を署名し、client.crtを作成します。
bash
openssl x509 -req -days 365 -sha256 -in client.csr -CA client-ca.crt -CAkey client-ca.key -CAcreateserial -out client.crt
  1. クライアント側証明書情報を確認します。
bash
openssl x509 -noout -text -in client.crt
  1. 証明書を検証します。
bash
openssl verify -CAfile client-ca.crt client.crt

証明書の削除

証明書を削除すると、ポート8883および8084でのクライアント接続が切断されます。削除が業務に影響を与えないことを必ず確認してください。

  1. EMQX Cloudコンソールにログインします。
  2. TLS/SSL設定セクションで削除したい証明書の削除アイコンをクリックします。
  3. ダイアログでOKをクリックして削除を完了します。

FAQ

証明書に複数の証明書が含まれている場合

購入した証明書には中間証明書が含まれていることがあります。証明書をテキスト形式で開くと、ユーザー証明書、中間証明書、ルート証明書の順に複数の証明書が含まれています。一般的に、証明書はユーザー証明書と複数の中間証明書で構成されているため、ユーザー証明書と中間証明書を分離し、中間証明書を証明書チェーンに入力する必要があります。

bash
-----BEGIN CERTIFICATE-----

ユーザー証明書

-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----

中間証明書

-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----

ルート証明書

-----END CERTIFICATE-----

証明書チェーンが不足している場合

証明書チェーンの補完はこちらを参照してください:https://myssl.com/chain_download.html

双方向TLS(mTLS)使用時にユーザー名/パスワード認証を無効にできますか?

はい、**相互TLS(mTLS)**使用時にユーザー名/パスワード認証を無効にすることは可能です。ただし、セキュリティ上の理由から両方の認証方式を有効にしておくことを強く推奨します。デバイス証明書が漏洩した場合、不正なデバイスがEMQX Cloudに接続できてしまうリスクがあるためです。

ユーザー名/パスワード認証を無効にしたい場合、v5 Dedicatedデプロイメントではコンソールのポート管理から直接設定可能です。他のデプロイメントタイプの場合はサポートチケットを提出してください。SREチームがポート8883および8084の認証無効化を支援します。

エンドツーエンドの設定ガイドはデバイス接続のためのmTLSベストプラクティスを参照してください。

証明書のCNをユーザー名またはクライアントIDにマッピングできますか?

はい、EMQX Cloudでは証明書のCommon Name(CN)をユーザー名またはクライアントIDにマッピングできます。マッピングを有効にしたい場合はサポートチケットを提出してください。SREチームが設定を行います。

重要な注意点:

  • CNをクライアントIDにマッピングする場合:CNは一意である必要があります。同じCNを複数のクライアントが共有するとクライアントIDの競合により切断が発生します。
  • CNをユーザー名にマッピングする場合:接続競合を防ぎつつ本人確認が可能なため、一般的に安全です。

ユーザー名/パスワード認証を無効にし、CNをユーザー名にマッピングした場合、漏洩した証明書による接続をどう防止しますか?

証明書が漏洩しCNをユーザー名にマッピングしている場合、該当ユーザー名をブラックリストに追加することで不正デバイスの接続を防止できます。

一方向TLSと相互TLS接続を同時に使用できますか?

はい。EMQXの各デプロイメントは1セットのTLS/SSL証明書のみ使用可能ですが、異なるリスナーを通じて異なるTLS接続タイプをサポートできます。すでに相互TLS認証が有効な場合でも、追加で一方向TLSポートを有効に可能です。ただし、相互TLSと一方向TLSの両方のポートで同じサーバー証明書を使用する必要があります。これにより証明書更新時のサービス中断を防止します。