Skip to content

BYOCプランでのTLS/SSL設定

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

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

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

片方向認証モード

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

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

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

BYOC環境でTLS/SSLを設定するには、以下のコンポーネントを含む単一の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 Platform Consoleで双方向TLS/SSLを設定し、TLS/SSL構成済みのクライアント接続をテストする方法を案内します。また、セットアップの各ステップを解説した双方向TLS/SSLチュートリアルもご覧いただけます。

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

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

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

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

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

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

    • Client ID:クライアントIDはランダム生成されます。再生成したい場合はリフレッシュボタンをクリックしてください。

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

      • MQTT over TLSを使用する場合は、mqtts://およびポート8883を選択します。
      • WebSocket over TLSを使用する場合は、wss://およびポート8084を選択します。
    • UsernameおよびPassword:作成済みの認証情報を入力します。

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

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

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

      • サーバー側CAがCA機関によって認証されている場合は、Self signedを選択し、CA Fileフィールドに証明書を入力します。自己署名のTLS/SSL証明書の作成方法は自己署名TLS/SSL証明書の作成を参照してください。
      • 自己署名のサーバー側証明書の場合は、Self signedを選択して自己署名のサーバー側CA証明書を提供します。
      • 双方向TLSではクライアント証明書ファイルとクライアント鍵ファイルも入力する必要があります。
  2. Connectをクリックします。

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 Platform Consoleにログインします。
  2. TLS/SSL Configセクションの証明書の削除アイコンをクリックします。
  3. ダイアログでOKをクリックして削除を完了します。