证书的生成和配置请参考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加密通讯相关推荐

  1. mqtt支持加密通讯

    1. mqtt第三方库支持openssl    a, 编译openssl库(我使用的是1.0.1),在mqtt源码目录下创建openssl文件夹,并拷贝编译完成的库文件与头文件到此文件夹下.    b ...

  2. openssl paho.mqtt交叉编译

    Openssl移植到ARM开发板  https://blog.csdn.net/lingyuncao/article/details/90667781 ./config no-asm -shared ...

  3. paho.mqtt.c简单介绍

    概述 paho.mqtt.c 是Eclipse编写的开源mqtt c库,支持Posix标准操作系统(如Linux,Android,Mac)和windows操作系统. Paho MQTT C客户端支持全 ...

  4. Javascript到PHP加密通讯的简单实现

    互联网上大多数网站,用户的数据都是以明文形式直接提交到后端CGI,服务器之间的访问也大都是明文传输,这样可被一些别有用心之人通过一些手段监听到.对安全性要求较高的网站,比如银行和大型企业等都会使用HT ...

  5. Apache Httpd 2.2 配置CA证书,实现Https加密通讯

    什么是CA证书 关于什么是CA证书,以及如何使用Open-SSL申请和搭建CA证书,我们在之前的文章中已经有过介绍,这里不再赘述.若有疑问,可参考之前的文章. http://www.pojun.tec ...

  6. (JS-PHP)使用RSA算法进行加密通讯

    用户名密码明文直接POST到后端,很容易被别人从监听到.注:包括使用MD5等哈希函数处理后的数据,这里也算做明文(现在MD5爆破网站已经很多了~).对安全性要求较高的网站,比如银行和大型企业等都会使用 ...

  7. MQTT客户端paho.mqtt.XXX

    1. MQTT客户端C代码库 C语言库:https://github.com/eclipse/paho.mqtt.c 1.1 C源码下载构建 # centos7 OS 方法一 $ git clone ...

  8. 小程序paho.mqtt连接微消息队列 MQTT 版

    物联网项目现在越来越多,MQTT的使用场景也越来越广泛,同时遇到的技术问题也是越来越复杂. 最近在做一个小程序连接阿里云的微消息队列MQTT版,说实话,通过这次debug,发现阿里的技术文档很多方面不 ...

  9. linux im6q交叉编译paho.mqtt.c

    工具链问题 本来编译一下paho应该是没大问题的,反倒是cortexa9hf-vfp-neon-poky-linux-gnueabi这个工具链使用上出问题了 从开发板开发那边拿到的或者直接从nxp社区 ...

最新文章

  1. 科技互联网公司真的越来越重视数学了吗?
  2. pybind 传递指针
  3. html5的音乐标签使用,html5 音乐播放器 audio 标签使用概述_html5教程技巧
  4. Spring Boot 2.0官方文档之 Actuator
  5. 每日温度—leetcode739
  6. 自定义语言的实现——解释器模式
  7. WebAPI(part8)--节点操作
  8. Spring-beans-BeanWrapper
  9. 数据科学家们会被 AutoML 代替吗?
  10. 提升精度或者训练损失不继续下降办法汇总,(进一步提升效果)
  11. 在html中做表格以及给表格设置高宽字体居中和表格线的粗细
  12. 51单片机多种方式点亮LED
  13. 2021,你值得看的华为/字节/腾讯/京东/网易/滴滴面经分享
  14. 《裂变式创业》读书心得
  15. java定义私有变量_Java Reflection(七):私有变量和私有方法
  16. JAVA毕设项目html5在线医疗系统(Vue+Mybatis+Maven+Mysql+sprnig+SpringMVC)
  17. 天勤python_天勤量化
  18. 民间秘方是一个老中医几十年的心血
  19. JavaScript-冻结对象
  20. 从小米上市了解CDR和“同股不同权”

热门文章

  1. 微信小程序从注册appid到熟悉静态微信特有标签
  2. (1分钟速通面试) 矩阵分解相关内容
  3. 唯品會大規模 Redis Cluster 的生産實踐
  4. 飞机绕地飞行一周问题
  5. wonderware配置-historian配置导入导出
  6. 矩阵变换PA=B理解
  7. HTTP请求出现403报错
  8. 华为荣耀20和x10比较_华为荣耀x10和荣耀30S别乱选, 对比后差距很明显
  9. 达梦数据库DCA认证培训总结
  10. 请问一个神经网络的问题