X.509証明書認証
X.509は、安全なインターネット通信で広く使われている標準的な公開鍵証明書フォーマットです。EMQXはX.509証明書を用いたTLS/SSL接続およびクライアント/サーバー間の双方向認証をサポートしており、より高いレベルのセキュリティを提供します。
動作概要
EMQXはクライアントがX.509証明書を使ってTLS/SSL接続を確立できるようにし、X.509証明書認証のために証明書情報とクライアントのバインドをサポートします。その利用方法とワークフローは以下の通りです。
- サーバー証明書を発行し、EMQXでTLS/SSLを有効化し、双方向認証を設定します。
- クライアント証明書を発行し、証明書と秘密鍵ファイルをデバイスに組み込み、TLS/SSL接続に使用します。
- クライアントはTLSハンドシェイク時に証明書をサーバーに送信し、自身の正当性を証明します。
- EMQXはクライアントの証明書を受け取ると、その証明書を検証してクライアントの正当性を確認します。
- 検証が成功すると、サーバーはTLSハンドシェイクを完了し、安全な接続を確立します。
接続成功後、EMQXは証明書情報をクライアントのプロパティにマッピングして証明書とクライアントのバインドを実現できます。さらに、JWT認証やパスワード認証など他のアプリケーション層認証と組み合わせて複数の認証方式を実装することも可能です。
特長と利点
- セキュリティ:X.509はデジタル証明書と公開鍵暗号を用いた安全で信頼性の高い認証機構を提供し、通信の機密性、完全性、認証を保証します。不正なデバイスのネットワークアクセスや悪意ある操作を防止します。
- 相互運用性:X.509は広くサポートされている普遍的な標準です。多くのIoTデバイスがX.509証明書をサポートしており、デバイス間の認証や安全な通信を簡単かつ確実にします。
- スケーラビリティ:X.509は大規模なIoT展開に対応可能です。柔軟な証明書チェーンと管理機構を備え、複雑なIoT環境に適応し、多数のデバイスやエンティティの認証をサポートします。
- 信頼できる第三者検証:X.509証明書は、厳格なセキュリティ審査と検証を経た信頼できる認証局(CA)によって発行されることが多く、デバイスは信頼されたCA発行の証明書を用いて自身の正当性と証明書の有効性を保証できます。
- 強力な暗号アルゴリズムのサポート:X.509は共通の対称暗号および非対称暗号アルゴリズムを含む幅広い暗号アルゴリズムと鍵長をサポートし、IoTデバイスが強力な暗号技術で通信の安全性を確保できます。
- 柔軟な証明書設定と管理:X.509は柔軟な証明書設定と管理オプションを備えています。デバイスは用途に応じて適切な証明書属性や拡張フィールドを選択し、特定のIoTアプリケーション要件を満たせます。さらに、証明書の失効や更新も証明書管理機構で効果的に行えます。
これらの特長により、X.509はIoTセキュリティに最適な選択肢となります。EMQXはX.509証明書認証を完全にサポートし、IoTデバイスの安全なアクセスと通信を容易に実現します。
X.509証明書認証の有効化
X.509証明書認証は基本的にTLS/SSLの双方向認証です。設定方法は双方向認証付きSSL/TLSの有効化を参照してください。
TIP
X.509証明書認証はパスワード認証やJWT認証よりも先に実行されます。
証明書情報のマッピング
EMQXはX.509証明書情報をユーザー名やクライアントIDとしてマッピングし、証明書とクライアントのバインドを実現できます。これはダッシュボードまたは設定ファイルで設定可能です。
ピア証明書のCN、DN、または証明書全体の内容をユーザー名として使用できます。現在サポートされている証明書情報の解釈は以下の通りです。
cn
:証明書のCNフィールドdn
:証明書のDN情報(例:CN=xxx,OU=xxx,O=xxx,L=xxx,ST=xxx,C=xxx
形式)crt
:証明書のDER形式の内容pem
:DER証明書をPEM形式に変換した内容md5
:DERまたはPEM証明書内容のMD5値
ダッシュボードでの設定
- ダッシュボードを開き、管理 -> MQTT設定ページの一般タブを選択します。
- MQTT設定内で以下の項目を見つけて変更します。
- Use Peer Certificate as Username:X.509証明書情報をユーザー名としてマッピングします。
- Use Peer Certificate as Client ID:X.509証明書情報をクライアントIDとしてマッピングします。
- 変更を保存ボタンをクリックして設定を完了します。新規接続クライアントは設定に従ってマッピングされます。
設定ファイルでの設定
- インストール環境により
./etc
または/etc/emqx/etc
ディレクトリにある設定ファイルを開きます。 - MQTT設定は明示的に定義されていないため、以下を追記してデフォルト値を上書きします。
bash
mqtt {
# 証明書情報をクライアントIDとして使用
peer_cert_as_clientid = "disabled" # "disabled" | "cn" | "dn" | "crt" | "pem" | "md5"
# 証明書情報をユーザー名として使用
peer_cert_as_username = "cn" # "disabled" | "cn" | "dn" | "crt" | "pem" | "md5"
}