MQTT安全篇
- 设备安全性与设备可用性之间往往是零和博弈。
- 加密算法需要更多的计算能力,而物联网设备的性能往往非常有限。
- 物联网的网络条件常常要比家庭或者办公室的网络条件差许多。
- 网络层:有条件可以通过拉专线或者使用VPN来连接设备与MQTT代理,以提高网络传输的安全性。
- 传输层:传输层使用TLS加密是确保安全的一个好手段,可以防止中间人攻击(Man-In-The-Middle Attack)。客户端证书不但可以作为设备的身份凭证,还可以用来验证设备。
- 应用层:MQTT还提供客户标识(Client Identifier)以及用户名密码,在应用层验证设备。
- 尽可能使用高版本的TLS。
- 验证X509证书链防止中间人攻击。
- 尽量使用有CA发布的证书。
|
1
|
openssl req -new -x509 -days 365 -extensions v3_ca -keyout ca.key -out ca.crt
|
|
1
|
openssl genrsa -des3 -out server.key 2048
|
|
1
|
openssl genrsa -out server.key 2048
|
|
1
|
openssl req -out server.csr -key server.key -new
|
|
1
|
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365
|
|
1
2
3
4
|
listener 8883
cafile /etc/mosquitto/tls/ca.crt
certfile /etc/mosquitto/tls/server.crt
keyfile /etc/mosquitto/tls/server.key
|
|
1
2
|
mosquitto_sub -h host -p 8883 -t 'topic' --cafile ca.crt
mosquitto_pub -h host -p 8883 -t 'topic' -m '15' --cafile ca.crt
|
- 传输层:传输层使用TLS不但可以加密通讯,还可以使用X509证书来认证设备。
- 应用层:MQTT支持客户标识、用户名密码以及X509证书,在应用层验证设备。
|
1
2
|
password_file /etc/mosquitto/passwd
allow_anonymous false
|
|
1
2
|
mosquitto_sub -h host -p 8883 -t 'topic' --cafile ca.crt -u user -P pwd
mosquitto_pub -h host -p 8883 -t 'topic' -m '9' --cafile ca.crt -u user -P pwd
|
- 需要设计证书创建流程。如果你对设备有着完全的控制,在设备出厂前就能烧录X509证书到设备中,那么这条路是非常合适的。但是,对于移动设备等无法实现烧录证书的场景,用户名/密码认证或许是更好的选择。
- 需要管理证书的生命周期,最好通过PKI(Public-Key-Infrastructure)来管理。
- 如果证书泄露了,一定要立即使证书失效。一个选择是使用证书黑名单(Certificate Revocation Lists),另一个选择是提供在线证书状态协议(Online Certificate Status Protocol),方便MQTT代理及时了解证书的状态。
|
1
|
openssl genrsa -des3 -out client.key 2048
|
|
1
|
openssl req -out client.csr -key client.key -new
|
|
1
|
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365
|
|
1
2
3
4
5
|
listener 8883
cafile /etc/mosquitto/tls/ca.crt
certfile /etc/mosquitto/tls/server.crt
keyfile /etc/mosquitto/tls/server.key
require_certificate true
|
|
1
2
|
mosquitto_sub -h host -p 8883 -t 'topic' --cafile ca.crt --cert client.crt --key client.key
mosquitto_pub -h host -p 8883 -t 'topic' -m '95' --cafile ca.crt --cert client.crt --key client.key
|
|
1
|
acl_file /etc/mosquitto/acl
|
|
1
2
|
user tom
topic readwrite company/building/floor/#
|
- 仅允许相关的流量传递到MQTT代理,比如UDP、ICMP等流量可以直接屏蔽掉。
- 仅允许相关端口的流量传递到MQTT代理,比如MQTT over TCP使用1883,而MQTT over TLS使用8883。
- 仅允许某些IP地址段来访问MQTT代理,如果业务场景允许的话。
MQTT安全篇的更多相关文章
- 7-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(GPRS模块SSL连接MQTT)
6-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(Wi-Fi模块SSL连接MQTT) 由于GPRS是直接和GPRS基站进行连接,其实对于GPRS而言,即使不加 ...
- 6-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(Wi-Fi模块SSL连接MQTT)
5-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(配置MQTT的SSL证书,验证安全通信) 首先确定自己的固件打开了SSL,升级篇里面的固件我打开了SSL,如 ...
- 安全篇:弱密码python检测工具
安全篇:弱密码python检测工具 https://github.com/penoxcn/PyWeakPwdAudit
- 公有云Docker镜像P2P加速之路:安全篇
一.问题 在使用Docker运行容器化应用时,宿主机通常先要从Registry服务(如Docker Hub)下载相应的镜像(image).这种镜像机制在开发环境中使用还是很有效的,团队成员之间可以很方 ...
- 8-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(Apache 配置SSL,HTTPS连接)
https://www.cnblogs.com/yangfengwu/p/10947423.html 和当时配置MQTT差不多,去下载证书文件 https://www.cnblogs.com/ya ...
- 再探.NET的PE文件结构(安全篇)
一.开篇 首先写在前面,这篇文章源于个人的研究和探索,由于.NET有自己的反射机制,可以清楚的将源码反射出来,这样你的软件就很容易被破解,当然这篇文章不会说怎么样保护你的软件不被破解,相反是借用一个软 ...
- Web安全攻防-----TCP/IP安全篇
知识点: 掌握TCP/IP的体系分层结构 掌握TCP/IP的各一层功能特点 掌握TCP/IP的数据在各层的名称 掌握TCP/IP的体系数据的封装和解封装 1.TCP/IP协议的历史 TCP/IP的起源 ...
- http安全篇
一.app与服务端交互确保来源的安全 作为一个移动互联网App,天生是需要和服务器通信的.那么,服务器如何识别客户端的身份?我们如何保证数据传输过程中的安全性?要靠两个东西:使用AppKey做身份识别 ...
- linux安全篇
笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 1.限制用户su 限制能su到root的用户. 操作步骤 使用命令 vi /etc/pam.d/su修改配置文件, ...
随机推荐
- 在chrome开发者模式中查找你的js文件
在chrom开发者模式中按ctrl+o查找你的js文件
- EM算法 小结
猴子吃果冻 博客园 首页 新随笔 联系 管理 订阅 随笔- 35 文章- 0 评论- 3 4-EM算法原理及利用EM求解GMM参数过程 1.极大似然估计 原理:假设在一个罐子中放着许多白球和 ...
- mysql主从复制原理及步骤
原理: 1master开启bin-log功能,日志文件用于记录数据库的读写增删2需要开启3个线程,master IO线程,slave开启 IO线程 SQL线程,3Slave 通过IO线程连接maste ...
- 性能优化 | Tomcat和JVM的性能调优总结
Tomcat性能调优: 找到Tomcat根目录下的conf目录,修改server.xml文件的内容.对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创 ...
- Android跨进程通信Messenger
一.概述 我们可以在客户端发送一个Message给服务端,在服务端的handler中会接收到客户端的消息,然后进行对应的处理,处理完成后,再将结果等数据封装成Message,发送给客户端,客户端的ha ...
- python下载服务器
大佬们,你们还在为传输文件时利用U盘插拔而苦恼吗,还在为设置文件共享而苦恼吗?别苦恼了,教你一秒实现文件的传输. 首先我们都要有python环境,这个肯定有. 下面就是一秒,在你要传的文件的目录下输入 ...
- win10下检查nvidia显卡支持的cuda版本
1.首先将[C:\Program Files\NVIDIA Corporation\NVSMI]添加至系统环境变量[path]中: 2.在powershell中使用命令[nvidia-smi],即可看 ...
- 执行scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysqldb命令时一直报错:
Can't locate Data/Dumper.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /u ...
- 系统调用与内存管理(sbrk、brk、mmap、munmap)(转)
一.系统调用(System Call):在Linux中,4G内存可分为两部分——内核空间1G(3~4G)与用户空间3G(0~3G),我们通常写的C代码都是在对用户空间即0~3G的内存进行操作.而且,用 ...
- Android云端APP
使用HbuilderX打包APP 首先创建一个 5+APP+使用MUI项目 <!DOCTYPE html> <html> <head> <meta chars ...