Skip to content

ネットワークとTLS

IoTシナリオにおけるエンドツーエンドの暗号化通信にはセキュリティが不可欠です。Secure Sockets Layer(SSL)およびTransport Layer Security(TLS)プロトコルは、ネットワーク通信においてデータ送信の機密性を確保し、攻撃者による傍受や改ざんを防ぐために広く採用されています。SSL/TLS暗号化機能はトランスポート層でネットワーク接続を暗号化し、デジタル証明書を用いて通信当事者の認証を行い、安全な通信チャネルを確立します。

EMQXは以下の場合にSSLおよびTLS暗号プロトコルを採用し、安全なネットワーク通信を実現しています。

  • MQTTクライアントとEMQX間の接続確立時
  • データベースなどの外部リソースへの接続時
  • クラスター内の異なるEMQXノード間の通信時

EMQXは一方向/双方向認証やX.509証明書認証を含むSSL/TLS機能を包括的にサポートしています。

クライアント接続のためのTLS

本章のSSL/TLS接続の有効化では、MQTTクライアントとEMQX間でSSL/TLS接続を有効にする方法を詳細に解説しています。SSL/TLS証明書の取得では自己署名証明書の作成手順を案内しています。SSL/TLSのセキュリティをさらに強化するために、証明書検証用のCRLチェックやSSL/TLS証明書の失効状態確認のためのOCSPスタップリングも有効化可能です。クライアントTLSでは、サンプルのMQTTクライアントコードとプロジェクトを紹介しており、TLS利用ガイドも含まれています。

外部リソースアクセスのためのTLS

EMQXは外部リソースにアクセスする際にもTLSを有効化するオプションを提供しています。例えば、HTTPS経由でのWebサーバーアクセス時のパスワード認証や、データ統合のためのデータベース接続時などです。これらの機能をEMQXダッシュボードで設定する際に、Enable TLS をオンにすることでTLSを有効にできます。

  • SNI(Server Name Indication)は、サーバーのドメイン名と証明書が一致するかを示します。null値の場合は検証なしを意味します。
  • サーバーがクライアント証明書を検証する必要がある場合は、TLS CertTLS Key の入力が必須です。
  • TLS Verify を有効にした場合は、サーバー証明書の正当性を検証するために CA Cert フィールドの入力が必要です。
TLS有効化ダッシュボード

また、設定ファイルで機能を構成する際に ssl オプションを追加することも可能です。例えば、以下のように設定ファイルの authentication グループに記述します。

外部リソースアクセスに対しても、設定ファイル内の対応するsslオプションを設定してTLSを有効化できます。例えばHTTP認証バックエンドの設定例は以下の通りです。

hocon
authentication {
  url = "https://127.0.0.1:8080"
  backend = "http"

  ...

  ssl {
    enable = true
    # HTTPクライアントがHTTPサーバーの真正性を検証するために使用する信頼されたCA(認証局)証明書を含むPEM形式ファイル。
    cacertfile = "etc/certs/cacert.pem"
    # HTTPクライアントが送信するSSL/TLS証明書チェーンを含むPEM形式ファイル。証明書がルートCAから直接発行されていない場合、中間CA証明書をリスナー証明書の後に連結してチェーンを形成する必要があります。
    certfile = "etc/certs/cert.pem"
    keyfile = "etc/certs/key.pem"
    ## サーバーの証明書チェーンの真正性を検証する場合は 'verify_peer' を設定し、検証しない場合は 'verify_none' を設定します。
    verify = verify_peer
  }
}

ノード間通信のためのTLS

クラスター接続におけるSSL/TLSの有効化方法については本章では扱っておらず、詳細はクラスターセキュリティをご参照ください。

IPv6サポート

EMQXはクライアント接続、ダッシュボード、ノード間クラスター通信、および外部サービスへのアウトバウンド接続においてIPv6を完全にサポートしています。設定の詳細はIPv6をご覧ください。