前言
做了很久的实验,一直没能成功,最后还是down的大佬的源码,侵删。
正文
简介
MQTT协议是物联网应用中重要的应用层协议,上一次实验开展了MQTT协议的分析,对MQTT协议的长连接机制、发布/订阅工作模式交互机制进行了分析。但如果MQTT协议不进行安全实现,黑客可以恶意发布信息给服务器,特别是在工业、交通等物联网应用场合后果不堪设想。本实验旨构建MQTT协议安全通信。
要求
(1)掌握MQTT的安全通信的基本原理。
(2)设计MQTT安全通信的安全措施。
(3)实现基于TLS的MQTT通信。
基本步骤
(1)应用层:MQTT协议提供了客户标识以及用户名密码,以便验证设备。基于ACL对主题的订阅和发布权限设置基本的授权。
(2)传输层:传输层可使用TLS加密、验证证书机制,防止中间人攻击。
(3)网络层:可以通过专线或者使用VPN来连接设备与MQTT代理,以提高网络传输的安全性。可以通过防火墙保护MQTT代理端,比如限制端口、限制协议、限制IP段。
注意构建一个局域网,模拟MQTT服务端(代理端)、客户端(分订阅和发布),运用Wireshark抓包分析安全通信过程。
具体过程
服务器
var mosca = require('mosca')
var SECURE_KEY = __dirname + '/tls-key.pem';
var SECURE_CERT = __dirname + '/tls-cert.pem';
var settings = {
logger: {
name: "secureExample",
level: 40,
},
secure : {
port: 9090,
keyPath: SECURE_KEY,
certPath: SECURE_CERT,
}
};
var server = new mosca.Server(settings);
server.on('published', function(packet, client) {
//当客户端有连接发布主题消息
var topic = packet.topic;
console.log(packet);
switch (topic) {
case 'test':
console.log('收到消息:', packet.payload.toString());
//MQTT转发主题消息
//MqttServer.publish({ topic: 'other', payload: 'sssss' });
break;
case 'other':
console