git clone https://github.com/eclipse/paho.mqtt.c.git
cd paho.mqtt.c
sudo make install
嵌入式设备MQTT开发,若使用paho.mqtt.c开源库,总会涉及到部分平台要使用TLS证书认证,具体库代码如何配置见:使用paho_mqtt_c库实现mqtt的ssl加密通讯
- 认证方式:非TLS和TLS单项认证、TLS双向认证。(非TLS使用tcp://,TLS使用ssl://)
- 证书配置参数
实际开发过程中,设备端和平台端分别是由不同部门、甚至不同公司开发的,所以开发过程中的自测需要自己搭建测试环境或依托公司已有的测试环境,MQTT测试环境主要就是搭建代理服务器。
MQTT测试环境
- MQTT服务器:在线服务器或自己自建服务器。
- MQTT嵌入式:paho.mqtt.c库下的demo 或者 设备应用程序。 (做开发端)
- MQTT工具:MQTT.fx客户端。 (做调试验证)
设备调试内容主要有:
- 登录认证(具体认证方式,根据平台和设备的协议来:用户名和密码、TLS单向证书认证……)
- 作为订阅者:订阅主题、由平台/其他工具发布该主题消息、验证设备应用是否可以收到。
- 作为发布者:通过平台/其他工具订阅指定主题、再由设备发布主题消息、验证平台/工具是否可以收到。
- 其他:平台提供信息后、可先通过MQTT.fx等工具验证IP、端口、用户名和密码、证书是否可以使用(是否可以连接成功)。
补充资料:
paho.mqtt.c API接口描述
https://blog.csdn.net/guozhongwei1/article/details/85207169
Paho -物联网 MQTT C Cient的实现和详解
https://www.cnblogs.com/homejim/p/8196763.html
其他MQTT库:
https://github.com/eclipse/paho.mqtt.embedded-c
设备和平台若使用MQTT协议对接,当对方提供协议时、需关注如下信息:
- MQTT版本:常有版本3.1.1、3.1,部分对接使用5.0,设备默认使用3.1.1版本。
- 登录认证:匿名登录、用户名秘密认证、基于TLS 协议的双向证书的认证加密以及用户名密码认证、单向证书认证、
- Topic和content内容、程序当前是否都满足。
- QOS:部分代理限制或者不支持QOS=2。
- 调试提供:公网IP地址、端口(默认1883)、用户名和密码、CA证书(单向认证时需要)、CA证书和(双向认证时需要)
MQTT版本:代理可兼容3.1.1和5.0,但若是数据协议使用MQTT 5.0新特性时或代理仅支持5.0时,设备程序需要改代码。
- 匿名登录:代理配置支持匿名登录,那么Client(订阅/发布者)可以不填写用户名和密码进行登录。
- 用户名和密码认证:Client需要填写在平台注册过的用户名和密码进行登录。
- TLS单向证书认证:Client需填写用户名和密码、以及CA证书。
- TLS双向证书的认证加密以及用户名密码认证:Client需要填写用户名和密码,以及CA证书文件、Client证书文件、Client秘钥文件。
- TLS双向证书的认证加密以及 客户端证书中的 CN 值作为用户名:Client填写CA证书文件、Client证书文件、Client秘钥文件。
- TLS双向证书的认证加密以及 客户端证书中的完整主题值作为用户名:Client填写CA证书文件、Client证书文件、Client秘钥文件。
不同登录认证方式,设计MQTT代理的不同配置,可以在不同端口设置不同登录认证方式。
问题:
1.同一端口MQTT是否可以同时支持匿名登录与用户名和密码认证?
可以直接使用网络上的一些代理服务器+Client工具来进行设备功能调测。
这里只做基本介绍和使用步骤,详细操作看这里:mosquitto 测试MQTT TLS单向认证和双向认证
mosquitto 介绍
Eclipse mosquito是一个开源(EPL/EDL许可的)消息代理,它实现了MQTT协议版本5.0、3.1.1和3.1。mosquito是轻量级的,适用于所有设备,从低功耗的单板计算机到完整的服务器。
mosquitto 使用步骤
- mosquitto 下载和安装
- mosquitto 启动服务器
- mosquitto 添加用户名和密码
- 修改mosquitto.conf配置、再重启服务(配置不同的登录认证方式)
注意:
1.配置TLS证书时,证书文件可以在借助linux下openssl生成,证书文件可以跨平台使用。
2.可以通过MQTT.fx来进行验证服务器配置是否生效。(切换配置时、最好更换端口)
- MQTT服务器:在线代理服务器、平台、自己搭建服务器、对方给的代理服务器。
- MQTT客户端:windows下的MQTT.fx。
- MQTT设备端:paho.mqtt.c下的sample、设备应用代码。
MQTT协议-MQTT协议简介及协议原理
https://blog.csdn.net/jiesa/article/details/50635222
阿里云物联网平台:Paho-MQTT C接入示例
https://www.alibabacloud.com/help/zh/doc-detail/146611.htm#title-0a4-2nq-kat
Paho 项目介绍
http://wiki.eclipse.org/Paho
MQTT协议的优缺点
https://blog.csdn.net/anxianfeng55555/article/details/80908958
https://www.ebyte.com/new-view-info.aspx?id=1178
文章目录背景一、简述二、设计规范三、主要特性四、MQTT协议原理4.1 MQTT协议实现方式4.2 网络传输与应用消息4.3 MTT客户端4.4 MQTT服务器4.5 MQTT协议中的订阅、主题、会话4.6 MQTT协议中的方法五、MQTT协议数据包结构5.1 MQTT固定头5.1.1 MQTT数据包类型5.1.2 标识位5.1.3 剩余长度(Remaining Length)5.2 MQTT可变头5.3 Payload消息体总结参考资料背景新嵌入式物联网设备开发,使用新的物模型协议格式,该格式是基于
第三章内容简介
• 第一节:基于STM32的节点端介绍 • 硬件平台,软件开发环境
• 第二节:使用Paho MQTT客户端协议栈直连阿里云IoT平台 • 适用于资源受限的节点设备
• 第三节:使用Linkkit C-SDK和TLS通过MQTT协议直连阿里云IoT平台 • 适用于资源丰富的节点设备
STM32-阿里云IoT 联合课件开发
第三章 . 第二节 基于Paho.MQTT直连阿里云IoT平台
第三章.第二节 内容简介
• 项目例程演示 • 项目例程流程图 • 演示视频
• MQTT协议介绍 • 协议特性 • 协议模型和报文格式 • 报文使用序列 • 阿里云IoT云平台侧MQTT协议实现
编译:将paho_mqtt_c/CMakeList.txt中:启用SSL编译
SET(PAHO_WITH_SSL TRUE CACHE BOOL "Flag that defines whether to build ssl-enabled binaries too. ")
编译为静态库:
SET(PAHO_BUILD_SHAREDTRUECACHEBOOL"Buildsharedlib...
最近做物联网设备,需求长连接推送功能。当前物联网有一个标准协议是MQTT,对应有很多开源服务端,如何快速接入这个服务呢。有两种接入方案:
1.自己clone 代码修改维护。
2.找第三方服务,比如当前提供支持的有云巴,bat。bat目前都还处于公测中,at使用都需要申请设备,b可以直接接入。对比了价格,b最便宜,一个月免费消息1百万条。
最后决定先尝试使用百度云的MQTT服务后台,
最近做了个中移物联平台的项目,设备需要用到
MQTTS来完成通讯,所以使用到了
paho-
mqtt-c的开源的
MQTT协议栈库。
https://www.eclipse.org/
paho/index.php?page=downloads.php
非常全,各种语言的源码都有,根据自己需求下载,我这里需要的是C/C++的协议栈。
由于我只需要做一个客户端,做的又是嵌入式设备,源码太多也没用,就精简了一下。
实际上只用了几个重要的
MQTTClient.h
MQTTConnect.h
MQTTFormat.h
目录Mosquitto 与 Eclipse Paho MQTT TLS使能备忘为什么使用MQTT原型系统构成服务端软件环境客户端软件环境使用OpenSSL构建TLS
Mosquitto 与 Eclipse Paho MQTT TLS使能备忘
最近使用Mqtt协议为公司的分布式系统搭建了一个“简陋”的原型通信框架,实际使用下来效果还不错,因此打算对通信进行TLS加密,使其能够真正用于生产中。本文主要记录使用Mosquitto作为服务端及测试客户端,Paho MQTT(Python)作为客户端的使用配置下,用o
openssl 交叉编译
./config no-asm shared linux-armv4 no-async – prefix=/home/openssl-master/nuc980
// linux-armv4 =>>target
// no-async>undefined reference ***context
paho mqtt-c 交叉编译
cmake … -D
PAHO_BUILD_STATIC=TRUE -D
PAHO_WITH_SSL=TRUE - DCMKAE