paho.mqtt.c使用openssl加密通讯
证书的生成和配置请参考https://blog.csdn.net/sy84436446/article/details/128576433
- 下载和编译
# 下载paho.mqtt.c代码
git clone git@github.com:eclipse/paho.mqtt.c.git# 编译安装
make
make install
- 测试paho.mqtt.c
2.1订阅
修改src/samples/MQTTClient_subscribe.c
#define ADDRESS "ip"
#define TOPIC "test2"
运行订阅
cd build/output/samples
./MQTTClient_subscribe
使用mosquitto发布消息
mosquitto_pub -h "ip" -t "test2" -m "my name is xxx"
2.2发布
修改src/samples/MQTTClient_publish.c
#define ADDRESS "ip"
#define TOPIC "test1"
使用mosquitto订阅消息
mosquitto_sub -h "ip" -t "test1"
运行发布
cd build/output/samples
./MQTTClient_publish
- 使用openssl
3.1 启用ssl加密不做认证
# git diff src/samples/MQTTClient_publish.c
diff --git a/src/samples/MQTTClient_publish.c b/src/samples/MQTTClient_publish.c
index 399fd33..daa3522 100644
--- a/src/samples/MQTTClient_publish.c
+++ b/src/samples/MQTTClient_publish.c
@@ -19,9 +19,9 @@#include <string.h>#include "MQTTClient.h"-#define ADDRESS "tcp://mqtt.eclipseprojects.io:1883"
+#define ADDRESS "ssl://192.168.186.131:1883"#define CLIENTID "ExampleClientPub"
-#define TOPIC "MQTT Examples"
+#define TOPIC "test1"#define PAYLOAD "Hello World!"#define QOS 1#define TIMEOUT 10000L
@@ -41,6 +41,11 @@ int main(int argc, char* argv[])exit(EXIT_FAILURE);}+ MQTTClient_SSLOptions ssl_opts=MQTTClient_SSLOptions_initializer;
+ ssl_opts.enableServerCertAuth=0;
+ ssl_opts.sslVersion=MQTT_SSL_VERSION_DEFAULT;
+ conn_opts.ssl=&ssl_opts;
+conn_opts.keepAliveInterval = 20;conn_opts.cleansession = 1;if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS)
# 订阅
mosquitto_sub -h 192.168.186.131 -t test --cafile ./ca.crt
# 发布
./build/output/samples/MQTTClient_publish
3.2单向认证
注意在mosquitto配置文件中配置证书路径
# git diff src/samples/MQTTClient_publish.c
diff --git a/src/samples/MQTTClient_publish.c b/src/samples/MQTTClient_publish.c
index 399fd33..1155f24 100644
--- a/src/samples/MQTTClient_publish.c
+++ b/src/samples/MQTTClient_publish.c
@@ -19,9 +19,9 @@#include <string.h>#include "MQTTClient.h"-#define ADDRESS "tcp://mqtt.eclipseprojects.io:1883"
+#define ADDRESS "ssl://192.168.186.131:1883"#define CLIENTID "ExampleClientPub"
-#define TOPIC "MQTT Examples"
+#define TOPIC "test"#define PAYLOAD "Hello World!"#define QOS 1#define TIMEOUT 10000L
@@ -41,6 +41,11 @@ int main(int argc, char* argv[])exit(EXIT_FAILURE);}+ MQTTClient_SSLOptions ssl_opts=MQTTClient_SSLOptions_initializer;
+ ssl_opts.trustStore = "/home/sy/key/ca.crt";
+ ssl_opts.sslVersion=MQTT_SSL_VERSION_DEFAULT;
+ conn_opts.ssl=&ssl_opts;
+conn_opts.keepAliveInterval = 20;conn_opts.cleansession = 1;if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS)
# 订阅
mosquitto_sub -h 192.168.186.131 -t test --cafile ./ca.crt
# 发布
./build/output/samples/MQTTClient_publish
3.3双向认证
注意在mosquitto配置文件中开启require_certificate true。
# git diff src/samples/MQTTClient_publish.c
diff --git a/src/samples/MQTTClient_publish.c b/src/samples/MQTTClient_publish.c
index 399fd33..7a0fe3f 100644
--- a/src/samples/MQTTClient_publish.c
+++ b/src/samples/MQTTClient_publish.c
@@ -19,9 +19,9 @@#include <string.h>#include "MQTTClient.h"-#define ADDRESS "tcp://mqtt.eclipseprojects.io:1883"
+#define ADDRESS "ssl://192.168.186.131:1883"#define CLIENTID "ExampleClientPub"
-#define TOPIC "MQTT Examples"
+#define TOPIC "test"#define PAYLOAD "Hello World!"#define QOS 1#define TIMEOUT 10000L
@@ -41,6 +41,13 @@ int main(int argc, char* argv[])exit(EXIT_FAILURE);}+ MQTTClient_SSLOptions ssl_opts=MQTTClient_SSLOptions_initializer;
+ ssl_opts.trustStore = "/home/sy/key/ca.crt";
+ ssl_opts.privateKey = "/home/sy/key/client.key";
+ ssl_opts.keyStore = "/home/sy/key/client.crt";
+ ssl_opts.sslVersion=MQTT_SSL_VERSION_DEFAULT;
+ conn_opts.ssl=&ssl_opts;
+conn_opts.keepAliveInterval = 20;conn_opts.cleansession = 1;if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS)
# 订阅
sudo mosquitto_sub -h 192.168.186.131 -t test --cafile ./ca.crt --cert ./client.crt --key ./client.key
# 发布
./build/output/samples/MQTTClient_publish
paho.mqtt.c使用openssl加密通讯相关推荐
- mqtt支持加密通讯
1. mqtt第三方库支持openssl a, 编译openssl库(我使用的是1.0.1),在mqtt源码目录下创建openssl文件夹,并拷贝编译完成的库文件与头文件到此文件夹下. b ...
- openssl paho.mqtt交叉编译
Openssl移植到ARM开发板 https://blog.csdn.net/lingyuncao/article/details/90667781 ./config no-asm -shared ...
- paho.mqtt.c简单介绍
概述 paho.mqtt.c 是Eclipse编写的开源mqtt c库,支持Posix标准操作系统(如Linux,Android,Mac)和windows操作系统. Paho MQTT C客户端支持全 ...
- Javascript到PHP加密通讯的简单实现
互联网上大多数网站,用户的数据都是以明文形式直接提交到后端CGI,服务器之间的访问也大都是明文传输,这样可被一些别有用心之人通过一些手段监听到.对安全性要求较高的网站,比如银行和大型企业等都会使用HT ...
- Apache Httpd 2.2 配置CA证书,实现Https加密通讯
什么是CA证书 关于什么是CA证书,以及如何使用Open-SSL申请和搭建CA证书,我们在之前的文章中已经有过介绍,这里不再赘述.若有疑问,可参考之前的文章. http://www.pojun.tec ...
- (JS-PHP)使用RSA算法进行加密通讯
用户名密码明文直接POST到后端,很容易被别人从监听到.注:包括使用MD5等哈希函数处理后的数据,这里也算做明文(现在MD5爆破网站已经很多了~).对安全性要求较高的网站,比如银行和大型企业等都会使用 ...
- MQTT客户端paho.mqtt.XXX
1. MQTT客户端C代码库 C语言库:https://github.com/eclipse/paho.mqtt.c 1.1 C源码下载构建 # centos7 OS 方法一 $ git clone ...
- 小程序paho.mqtt连接微消息队列 MQTT 版
物联网项目现在越来越多,MQTT的使用场景也越来越广泛,同时遇到的技术问题也是越来越复杂. 最近在做一个小程序连接阿里云的微消息队列MQTT版,说实话,通过这次debug,发现阿里的技术文档很多方面不 ...
- linux im6q交叉编译paho.mqtt.c
工具链问题 本来编译一下paho应该是没大问题的,反倒是cortexa9hf-vfp-neon-poky-linux-gnueabi这个工具链使用上出问题了 从开发板开发那边拿到的或者直接从nxp社区 ...
最新文章
- 科技互联网公司真的越来越重视数学了吗?
- pybind 传递指针
- html5的音乐标签使用,html5 音乐播放器 audio 标签使用概述_html5教程技巧
- Spring Boot 2.0官方文档之 Actuator
- 每日温度—leetcode739
- 自定义语言的实现——解释器模式
- WebAPI(part8)--节点操作
- Spring-beans-BeanWrapper
- 数据科学家们会被 AutoML 代替吗?
- 提升精度或者训练损失不继续下降办法汇总,(进一步提升效果)
- 在html中做表格以及给表格设置高宽字体居中和表格线的粗细
- 51单片机多种方式点亮LED
- 2021,你值得看的华为/字节/腾讯/京东/网易/滴滴面经分享
- 《裂变式创业》读书心得
- java定义私有变量_Java Reflection(七):私有变量和私有方法
- JAVA毕设项目html5在线医疗系统(Vue+Mybatis+Maven+Mysql+sprnig+SpringMVC)
- 天勤python_天勤量化
- 民间秘方是一个老中医几十年的心血
- JavaScript-冻结对象
- 从小米上市了解CDR和“同股不同权”