Skip to content

BYOCプランでのTLS/SSL設定

MQTTエコシステム内のデータ送信の機密性を保護するために、EMQX BYOCプランではSSLおよびTLS暗号化プロトコルを使用して安全で暗号化された通信チャネルの確立をサポートしています。本ページでは、MQTTシステム内での安全な通信を確保するために、片方向および双方向認証モードでのTLS/SSL通信の有効化方法を紹介します。

以下の表は、片方向認証モードと双方向認証モードにおける各種証明書の要件を示しています。

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

片方向認証モード

片方向認証では、サーバー(EMQX MQTTブローカー)がTLS/SSLハンドシェイク時にクライアント(デバイスやアプリケーション)に有効な証明書を提示します。クライアントは提示された証明書を信頼された認証局(CA)と照合してサーバーの正当性を検証します。

BYOCプランでは、信頼されたCAによって署名された証明書のみが受け入れられます。これによりセキュリティが強化され、不正アクセスからMQTTクラスターを保護します。

必要な証明書コンポーネント

TLS/SSLをBYOC環境で設定するには、以下のコンポーネントを含む単一のPEMファイルを準備する必要があります。このPEMファイルはMQTTクライアントとEMQX MQTTブローカー間での安全な片方向認証を有効にするために重要です。

  1. サーバー証明書:信頼された認証局(CA)によって発行され、EMQX MQTTブローカーがクライアントと安全に接続するために使用されます。

  2. 証明書チェーン:信頼されたルートCA証明書までの完全な証明書チェーンを含めます。これによりクライアントはサーバー証明書の正当性を検証できます。

  3. 秘密鍵:サーバー証明書に対応する秘密鍵で、クライアントとEMQX MQTTブローカー間の通信の復号に必要です。

証明書の形式と標準ガイドライン

TLS/SSL設定用の証明書を準備する際は、以下のガイドラインに従ってください。

  • 証明書は暗号化アルゴリズムと鍵長を指定する必要があります。EMQX BYOCは1024ビットRSA(RSA_1024)および2048ビットRSA(RSA_2048)アルゴリズムをサポートしています。

  • 証明書はSSL/TLS X.509バージョン3標準に準拠している必要があります。公開鍵、完全修飾ドメイン名(FQDN)またはIPアドレス、発行者情報を含みます。

  • 証明書は自己署名(自身の秘密鍵)または発行CAの秘密鍵で署名できます。CAによる署名の場合は、証明書インポート時に証明書チェーンを含める必要があります。

  • 証明書は有効である必要があり、有効期間の開始または終了の30日以内にインポートしてはいけません

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

  • 秘密鍵はパスワードなしで、PKCS#1およびPKCS#8をサポートしている必要があります。

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

これらのガイドラインは、BYOC環境でのTLS/SSLの適切な設定と安全な展開を保証します。

「byoc create」コマンドでのPEMファイル使用方法

BYOCデプロイメント時には、PEMファイルをUbuntu環境のディレクトリにコピーし、./byoc createコマンドを実行する前にアクセス可能な状態にしてください。./byoc createコマンドを使用してBYOC環境をデプロイする際、--sslCertPathパラメータにPEMファイルの絶対パスを指定する必要があります。パラメータの設定方法の詳細はデプロイの実行をご参照ください。

双方向TLS/SSLの設定

以下の手順は、EMQX Cloud Consoleでの双方向TLS/SSL設定と、TLS/SSL設定済みクライアント接続のテスト方法を案内します。また、双方向TLS/SSLチュートリアルで各ステップの解説動画もご覧いただけます。

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

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

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

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

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

    • Name:接続名を入力します。
    • Client ID:クライアントIDはランダム生成されます。更新ボタンをクリックすると再生成可能です。
    • Host:ドロップダウンリストからプロトコルを選択し、デプロイ済みの接続アドレスとポートを入力します。
      • TLS上のMQTTを使用する場合は、mqtts://とポート8883を選択します。
      • TLS上のWebSocketを使用する場合は、wss://とポート8084を選択します。
    • UsernamePassword:作成済みの認証情報を入力します。
    • SSL/TLS:トグルスイッチをクリックしてSSL/TLSを有効にします。
    • SSL Secure:トグルスイッチをクリックしてSSL Secureを有効にします。
    • Certificate:必要に応じて証明書を選択します。
      • CA認証局によるサーバー側CA証明書の場合は、Self signedを選択し、CA File欄に証明書を入力します。自己署名TSL/SSL証明書の作成方法は自己署名TSL/SSL証明書の作成をご参照ください。
      • 自己署名サーバー側証明書の場合は、Self signedを選択して自己署名サーバー側CA証明書を提供します。
      • 双方向TLSの場合は、クライアント証明書ファイルとクライアント鍵ファイルも入力する必要があります。
  2. Connectをクリックします。

mqttx_tls

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

以下の手順は自己署名TSL/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

証明書の更新

証明書の有効期限が近づいた場合や交換が必要な場合は、デプロイメント概要ページで既存のTLS/SSL証明書を更新できます。

  1. EMQX Cloud Consoleにログインします。
  2. デプロイメント詳細ページのTLS/SSL Configセクションで更新対象の証明書を探し、操作列の編集アイコンをクリックします。
  3. TLS/SSL Configダイアログで新しい証明書内容を入力します。ファイルアップロードまたは内容の直接貼り付けが可能です。
    • TLS/SSLタイプ:証明書タイプは変更できず、既存の証明書と一致します。
    • 証明書および証明書チェーン:新しいサーバー証明書内容(証明書チェーンを含む)を入力します。
    • 証明書秘密鍵:新しい証明書に対応する秘密鍵を入力します。
    • クライアントCA証明書:双方向TLSの場合はクライアントCA証明書も入力します。
  4. 確認をクリックします。

証明書の削除

注意事項

TLS/SSL証明書の削除はBYOC v4デプロイメントでのみサポートされています。BYOC v5デプロイメントではこの操作はサポートされていません。

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

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