ネットワークとTLS
IoTシナリオにおけるエンドツーエンドの暗号化通信では、セキュリティが不可欠です。Secure Sockets Layer(SSL)およびTransport Layer Security(TLS)プロトコルは、データ通信の機密性を確保し、攻撃者による傍受や改ざんを防ぐためにネットワーク通信で広く採用されています。SSL/TLS暗号化機能はトランスポート層でネットワーク接続を暗号化し、デジタル証明書を用いて通信当事者の認証と安全な通信チャネルの確立を行います。
EMQXは以下の場合に安全なネットワーク通信を保証するため、SSLおよびTLS暗号プロトコルを採用しています。
- MQTTクライアントとEMQX間の接続確立時
- データベースなど外部リソースへの接続時
- クラスター内の異なるEMQXノード間の通信時
EMQXは片方向/双方向認証やX.509証明書認証を含む、SSL/TLS機能を包括的にサポートしています。
クライアント接続のTLS
本章のEnable SSL/TLS Connectionセクションでは、MQTTクライアントとEMQX間でSSL/TLS接続を有効にする方法を詳しく解説しています。Obtain SSL/TLS Certificatesページでは自己署名証明書の作成手順を案内しています。SSL/TLSを有効にした上でさらにセキュリティを強化するために、証明書検証用のCRLチェックやSSL/TLS証明書の失効状態確認のためのOCSPスタップリングも有効化可能です。Client TLSセクションには、サンプルのMQTTクライアントコードとプロジェクトが含まれており、TLS利用ガイドもこれらのサンプルに含まれています。
外部リソースアクセスのTLS
EMQXは外部リソースにアクセスする際にもTLSを有効にするオプションを提供しています。たとえば、HTTPS経由でのWebサーバーアクセスにパスワード認証を使う場合や、データ統合のためにデータベースに接続する場合などです。EMQXダッシュボードでこれらの機能を設定する際に、Enable TLSをオンにできます。
- SNI(Server Name Indication)は、サーバーのドメイン名と証明書が一致するかを示します。null値の場合は検証なしを意味します。
- サーバーがクライアント証明書を検証する必要がある場合は、TLS CertとTLS Keyの入力が必須です。
- TLS Verifyを有効にした場合は、サーバー証明書の正当性を検証するためにCA Certフィールドの入力が必要です。

また、設定ファイルでこれらの機能を設定する際にssl
オプションを追加可能です。例えば、設定ファイルのauthentication
グループに以下のように記述します。
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"
# 証明書に対応する秘密鍵を含むPEM形式ファイル
keyfile = "etc/certs/key.pem"
## サーバーの証明書チェーンの真正性を検証する場合は'verify_peer'、検証しない場合は'verify_none'を設定
verify = verify_peer
}
}
ノード間通信のTLS
クラスター接続におけるSSL/TLSの有効化方法については本章では扱っておらず、詳細はCluster Securityをご参照ください。