セキュリティを維持したい単純なMQTT Mosquittoサーバーがあります。
蚊.conf:
log_type all
password_file /etc/mosquitto/mosquitto_users.txt
pid_file /var/run/mosquitto.pid
persistence true
persistence_location /var/lib/mosquitto/
port 8883
cafile /etc/mosquitto/ca_certificates/ca.crt
keyfile /etc/mosquitto/ca_certificates/server.key
certfile /etc/mosquitto/ca_certificates/server.crt
tls_version tlsv1
現在のサーバーで以下を生成します。
CA証明書
openssl genrsa -des3 -out ca.key 2048
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
サーバー証明書:
openssl genrsa -out server.key 2048
openssl req -new -out server.csr -key server.key
自己署名サーバー証明書:
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 720
構成に応じてmsoquitto.conf
必要なすべてのファイルを配置します。
ca.crt
証明書を介してメッセージを購読して公開するには、次のコマンドを使用しています。
mosquitto_sub -h 192.168.1.8 -t sensor --cafile ca.crt -p 8883 -d
mosquitto_pub -h 192.168.1.8 -t sensor --cafile ca.crt -m "test" -p 8883 -d
すべてが正常です。しかし、人々間のコミュニケーションは安全ですか?サーバーをインターネットに置くと、誰も情報を取得できませんか?
答え1
このように動作すると、常に少し怖いです。
テストしたい場合は、失敗を試してみることもできます。誰かがあなたのサーバーを偽装しようとすると、あなたの(自己署名)CA証明書で署名された証明書を使用してそれを行うことはできません。したがって、クライアントが使用するCA証明書がサーバー証明書に署名するために使用される証明書と一致しない場合は、何が起こるのかを確認したい場合があります。
したがって、クライアントが証明書をmosquitto_sub
正しく検証していることをテストするために、mosquitto_pub
新しい「ダミー」CA証明書を生成してみることができます。 いいえサーバーにインストールしてください。しかし、次のコマンドmosquitto_sub
で試してみてくださいmosquitto_pub
。
mosquitto_sub -h 192.168.1.8 -t sensor --cafile dummy_ca.crt -p 8883 -d
mosquitto_pub -h 192.168.1.8 -t sensor --cafile dummy_ca.crt -m "test" -p 8883 -d
クライアントがサーバーと安全に通信している場合は失敗します。これは、サーバー証明書がクライアントが期待するCA証明書で署名されていないためです。仮想証明書に適用される場合は問題があり、その理由を調査する必要があります。
公開鍵暗号化は、鍵ペア(公開鍵と秘密鍵)を使用して機能します。秘密鍵は隠されており、他の人とは決して共有されません。誰でも。公開鍵を使用して暗号化されたすべての項目は、秘密鍵を介してのみ復号化できます。公開鍵も公開鍵で暗号化されたコンテンツを復号化するために使用できず、公開鍵から秘密鍵を見つけることもできません。
したがって、暗号化されたチャネルを介して通信するために、2つのデバイス(クライアントとサーバー)は秘密鍵を秘密に保ちながら公開鍵を互いに送信します。この情報は何も解読するために使用できないため、ハッカーがこれらの情報を取得できるかどうかは重要ではありません。その後、クライアントはサーバーの公開鍵を使用してすべてを暗号化し、サーバーはクライアントの公開鍵を使用してすべてを暗号化します。メッセージを復号化できる秘密鍵を持つ唯一のサーバーなので、サーバーだけが受信したメッセージを復号化できます。同様に、クライアントは送信されたメッセージを復号化できる唯一のクライアントです。
証明書は、ハッカーがサーバーを偽装して「中間者攻撃」を実行できないようにするためにのみ使用されます。証明書には3つの重要な情報が含まれています。
- サーバー名(例:ドメイン名)
- サーバーの公開鍵
- CAの署名は、証明書が本物であることを証明します。
これにより、ハッカーは次のことを行う必要があるため、サーバーを偽装することはできません。
- 送信するすべての内容を復号化するには、サーバーの秘密鍵にアクセスしてください。 この情報は、サーバーによって常に秘密に保たれ、誰にも公開されていないため取得できません。
- 自分の(偽)公開鍵がサーバーに適していることを示す証明書を送信します。 CA署名を取得できないため、偽の証明書を作成できません。