ネットワークとTLS
IoTシナリオにおけるエンドツーエンドの暗号化通信にはセキュリティが不可欠です。Secure Sockets Layer(SSL)およびTransport Layer Security(TLS)プロトコルは、ネットワーク通信においてデータ送信の機密性を確保し、攻撃者による傍受や改ざんを防ぐために広く採用されています。SSL/TLS暗号化機能はトランスポート層でネットワーク接続を暗号化し、デジタル証明書を用いて通信当事者の認証を行い、安全な通信チャネルを確立します。
EMQXは以下の場合に、安全なネットワーク通信を保証するためにSSLおよびTLS暗号プロトコルを採用しています。
- MQTTクライアントとEMQX間の接続確立時
- データベースなど外部リソースへの接続時
- クラスター内の異なるEMQXノード間の通信時
EMQXは一方向/双方向認証やX.509証明書認証を含むSSL/TLS機能を包括的にサポートしています。
クライアント接続のTLS
EMQXはMQTTクライアント接続に対してSSL/TLS暗号化をサポートし、クライアントとブローカー間の安全で暗号化された通信を実現します。TLSリスナーを設定することで、一方向認証(サーバー認証のみ)または双方向認証(mTLS)を、セキュリティ要件に応じて選択できます。
本章のSSL/TLS接続の有効化では、ダッシュボードや設定ファイルを用いたTLSリスナーの設定手順を詳しく解説しています。
証明書管理
EMQXはSSL/TLSのための統一された証明書管理モデルを提供しており、証明書の取得、保存、管理、リスナーやその他TLS対応コンポーネント間での再利用方法をカバーしています。これは従来のパスベース証明書だけでなく、集中管理によるライフサイクル管理を行うマネージド証明書も含みます。
EMQXにおける証明書の概念とワークフローの詳細はSSL/TLS証明書をご参照ください。
証明書検証と失効確認
TLSのセキュリティをさらに強化するため、EMQXは証明書検証および失効確認をサポートしています。
- CRLチェック:証明書失効リストを用いて証明書が失効していないかを検証します。詳細はCRLチェックをご覧ください。
- OCSPスタップリング:オンライン証明書状態プロトコルを用いて証明書の失効状態を確認します。詳細はOCSPスタップリングをご覧ください。
これらの機能はTLSリスナー設定時に有効化でき、侵害された証明書の使用を防止します。
クライアント側TLSの例
クライアントTLSセクションでは、SSL/TLSを用いてEMQXに安全に接続するためのMQTTクライアントコード例やサンプルプロジェクトを提供しています。クライアント証明書やTLSオプションの設定方法についても実践的なガイダンスを含みます。
外部リソースアクセスのTLS
EMQXはHTTPベースの認証サービス、データベース、その他のデータ統合サービスなど外部リソースへのアクセス時にもSSL/TLS暗号化をサポートしています。対応機能の設定時にダッシュボードからEnable TLSオプションを有効にすることでTLSを適用できます。
ダッシュボードでのTLS設定オプション
TLSを有効化すると、以下のオプションが利用可能です。
- TLS Verify:外部リソースのサーバー証明書を検証するかどうかを制御します。有効にするとEMQXはサーバーの証明書チェーンを検証します。
- Middle Box Compatibility Mode:TLS 1.3接続の互換モードを有効にします。一部のネットワークミドルボックスが標準のTLS 1.3ハンドシェイクを正しく処理できない場合に、TLS 1.2に似たハンドシェイクに適応し接続成功率を向上させます。
- SNI:サーバー名表示(Server Name Indication)で、TLSハンドシェイク時にサーバードメイン名と証明書の一致を検証します。空欄の場合はホスト名検証を行いません。
- Certificate Source:クライアント証明書が必要な場合の提供方法を指定します。
- Enter Manually:証明書内容やファイルを直接入力。
- Select from Managed Certs:EMQXで集中管理されている証明書バンドルを参照(EMQX 6.1以降)。証明書の再利用やローテーションが容易になります。証明書バンドルの作成・管理についてはマネージド証明書をご覧ください。
- TLS Cert / TLS Key:外部サーバーがクライアント証明書を検証する(双方向TLS)場合に必要です。
- CA Cert:TLS Verifyを有効にした場合に、サーバー証明書の検証に使用します。

設定ファイルによるTLS設定
外部リソースアクセスに対しても、設定ファイル内のsslオプションを設定してTLSを有効化できます。例えばHTTP認証バックエンドの設定例は以下の通りです。
authentication {
url = "https://127.0.0.1:8080"
backend = "http"
...
ssl {
enable = true
cacertfile = "etc/certs/cacert.pem"
certfile = "etc/certs/cert.pem"
keyfile = "etc/certs/key.pem"
verify = verify_peer
}
}SSL設定項目:
enable:外部リソースへのアウトバウンド接続に対してSSL/TLSを有効化します。cacertfile:HTTPクライアントがHTTPサーバーの真正性を検証するために使用する信頼済み認証局(CA)証明書群を含むPEM形式ファイルのパス。certfile:クライアントが提示するSSL/TLS証明書チェーンを含むPEM形式ファイルのパス。ルートCAから直接発行されていない場合は、中間CA証明書をクライアント証明書の後に連結して完全なチェーンを形成します。keyfile:certfileで指定したクライアント証明書に対応するPEM形式の秘密鍵ファイルのパス。verify:サーバー証明書検証の挙動を制御します。verify_peer:サーバー証明書チェーンを検証します。verify_none:サーバー証明書を検証しません。
マネージド証明書はリスナーと同様の証明書管理モデルに従い、設定ファイル内でも参照可能です。詳細は一方向認証のSSL/TLS有効化の設定ファイルによるリスナー設定をご参照ください。
ノード間通信のTLS
クラスター接続に対するSSL/TLS有効化手順は本章では扱っていません。詳細はクラスターセキュリティをご覧ください。
IPv6サポート
EMQXはクライアント接続、ダッシュボード、ノード間クラスター通信、外部サービスへのアウトバウンド接続においてIPv6を完全にサポートしています。設定の詳細はIPv6をご参照ください。