ネットワークと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 Cert と TLS Key の入力が必須です。
- TLS Verify を有効にした場合は、サーバー証明書の正当性を検証するために CA Cert フィールドの入力が必要です。

また、設定ファイルで機能を構成する際に ssl オプションを追加することも可能です。例えば、以下のように設定ファイルの authentication グループに記述します。
外部リソースアクセスに対しても、設定ファイル内の対応するsslオプションを設定してTLSを有効化できます。例えばHTTP認証バックエンドの設定例は以下の通りです。
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をご覧ください。