本文共 2549 字,大约阅读时间需要 8 分钟。
物联网的核心在于连接万物,通过数据交换提升生活便利性。然而,设备安全性与可用性之间存在零和博弈关系。例如,某家智能洗衣机因未采取基本安全措施被黑客控制,导致智能家居发展受挫。这表明物联网安全设计的重要性,而非技术本身的缺陷。
本文将探讨MQTT的安全特性,特别是如何通过TLS加密和认证机制来保障物联网项目的顺利实施。
MQTT协议作为物联网的重要通信工具,具备多层次的安全机制:
网络层
可通过专线或VPN提高网络传输安全性,但此方面超出了本文范围。传输层
使用TLS加密是确保安全的有效手段。TLS不仅加密通信,还能防止中间人攻击(Man-In-The-Middle Attack)。通过X509证书,设备可验证身份,证书认证可防止中间人伪造。应用层
MQTT支持客户标识(Client Identifier)、用户名密码以及X509证书进行应用层验证,提升设备身份认证的可靠性。MQTT默认不加密通信,但对于敏感信息或设备远程控制,TLS是必不可少的选择。
生成CA证书:
openssl req -new -x509 -days 365 -extensions v3_ca -keyout ca.key -out ca.crt
生成MQTT代理密钥并签名:
openssl genrsa -des3 -out server.key 2048openssl genrsa -out server.key 2048openssl req -out server.csr -key server.key -new
签署代理证书:
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365
配置Mosquitto:
listener 8883 cafile /etc/mosquitto/tls/ca.crt certfile /etc/mosquitto/tls/server.crt keyfile /etc/mosquitto/tls/server.key
启动服务并测试:
mosquitto_sub -h host -p 8883 -t 'topic' --cafile ca.crtmosquitto_pub -h host -p 8883 -t 'topic' -m '15' --cafile ca.crt
MQTT认证可分为传输层和应用层:
通过TLS握手验证X509证书,确保设备身份合法。若证书验证失败,可立即中断连接,节省资源。
password_file /etc/mosquitto/passwdallow_anonymous false
mosquitto_sub -h host -p 8883 -t 'topic' -u user -P pwd --cafile ca.crt
openssl genrsa -des3 -out client.key 2048openssl req -out client.csr -key client.key -new
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365
listener 8883 cafile /etc/mosquitto/tls/ca.crt certfile /etc/mosquitto/tls/client.crt keyfile /etc/mosquitto/tls/client.key require_certificate true
mosquitto_sub -h host -p 8883 -t 'topic' --cafile ca.crt --cert client.crt --key client.key
MQTT代理支持基于Access Control List(ACL)的权限管理:
acl_file /etc/mosquitto/acl
user tomtopic readwrite company/building/floor/#
通过合理运用MQTT的安全特性,结合TLS加密和认证机制,可以有效保障物联网项目的安全性,避免类似智能洗衣机事件的发生。
转载地址:http://rtffk.baihongyu.com/