【MQTT】mosquitto库中SSL/TLS相关API接口
文章目录
- 1.相关API
- 1.1 mosquitto_tls_set
- 1.2 mosquitto_tls_insecure_set
- 1.3 mosquitto_tls_opts_set
- 1.4 mosquitto_tls_insecure_set
- 1.5 mosquitto_tls_set_context
- 1.6 mosquitto_tls_psk_set
- 2.示例代码
Mosquitto 是一个流行的 MQTT 消息代理(broker),它支持使用 SSL/TLS 来保障通信的安全性。有关于SSL/TLS的介绍可参考: SSL/TLS介绍。下面是与 SSL/TLS 相关的 Mosquitto 库中的一些重要 API:
1.相关API
1.1 mosquitto_tls_set
int mosquitto_tls_set(struct mosquitto *mosq, const char *cafile, const char *capath, const char *certfile, const char *keyfile, int (*pw_callback)(char *buf, int size, int rwflag, void *userdata));
该函数用于设置 SSL/TLS 相关参数。它接受以下参数:
mosq
: 指向 mosquitto 实例的指针。cafile
: 包含 CA 证书的文件路径。capath
: 包含 CA 证书的文件夹路径。certfile
: 包含客户端 SSL 证书的文件路径(如果需要)。keyfile
: 包含客户端私钥的文件路径(如果需要)。pw_callback
: 一个回调函数,如果设置了密码则用于获取密码。
1.2 mosquitto_tls_insecure_set
int mosquitto_tls_insecure_set(struct mosquitto *mosq, bool value);
这个函数允许你设置是否对不受信任的服务器证书进行验证。将 value
设置为 true
将禁用服务器证书验证,这在测试环境中可能会有用,但在生产环境中请务必谨慎使用。
1.3 mosquitto_tls_opts_set
int mosquitto_tls_opts_set(struct mosquitto *mosq, int option, const void *value);
允许你设置与 TLS 相关的其他选项,例如用于自定义验证的回调函数等。
1.4 mosquitto_tls_insecure_set
int mosquitto_tls_insecure_set(struct mosquitto *mosq, bool value);
如果将 value
设置为 true
,则会禁用服务器证书的验证。
1.5 mosquitto_tls_set_context
int mosquitto_tls_set_context(struct mosquitto *mosq, SSL_CTX *ctx);
允许你使用自定义的 OpenSSL SSL_CTX 对象来配置 TLS 连接。
1.6 mosquitto_tls_psk_set
int mosquitto_tls_psk_set(struct mosquitto *mosq, const char *psk, const char *identity, const char *ciphers);
如果你要使用 Pre-Shared Key(PSK)来保障连接安全,可以使用这个函数。
这些是一些与 SSL/TLS 相关的 Mosquitto 库中的重要 API。使用这些函数,你可以配置 Mosquitto 实例以在 MQTT 通信中使用 SSL/TLS 进行安全保护。务必在使用这些函数时参考 Mosquitto 的官方文档以获取详细的信息和示例代码。
2.示例代码
#include <mosquitto.h>int main(int argc, char **argv)
{struct mosquitto *mosq = NULL;const char *host = "mqtt.example.com";int port = 8883; // 默认 MQTT over SSL/TLS 端口const char *topic = "example/topic";const char *message = "Hello, MQTT with SSL/TLS!";mosquitto_lib_init();mosq = mosquitto_new(NULL, true, NULL);if (!mosq) {fprintf(stderr, "Error: Unable to create Mosquitto instance.\n");return 1;}// 设置 SSL/TLS 参数mosquitto_tls_set(mosq, "/path/to/ca.crt", NULL, "/path/to/client.crt", "/path/to/client.key", NULL);// 连接到 MQTT 服务器int rc = mosquitto_connect(mosq, host, port, 60);if (rc) {fprintf(stderr, "Error: Unable to connect to the MQTT broker. Return code: %d\n", rc);mosquitto_destroy(mosq);mosquitto_lib_cleanup();return 1;}// 发布消息rc = mosquitto_publish(mosq, NULL, topic, strlen(message), message, 0, false);if (rc) {fprintf(stderr, "Error: Unable to publish message. Return code: %d\n", rc);}// 断开连接并清理资源mosquitto_disconnect(mosq);mosquitto_destroy(mosq);mosquitto_lib_cleanup();return 0;
}
此示例使用了 mosquitto_tls_set
函数来设置 SSL/TLS 相关参数,然后连接到 MQTT 服务器并发布一条消息。记得在实际应用中,还需要添加更多的错误处理和安全性检查,这里不多加赘述。
相关文章:
【MQTT】mosquitto库中SSL/TLS相关API接口
文章目录 1.相关API1.1 mosquitto_tls_set1.2 mosquitto_tls_insecure_set1.3 mosquitto_tls_opts_set1.4 mosquitto_tls_insecure_set1.5 mosquitto_tls_set_context1.6 mosquitto_tls_psk_set 2.示例代码 Mosquitto 是一个流行的 MQTT 消息代理(broker)…...
假期题目整合
1. 下载解压题目查看即可 典型的猪圈密码只需要照着输入字符解开即可得到答案 2. 冷门类型的密码题型,需要特意去找相应的解题思路,直接百度搜索天干地支解密即可 3. 一眼能出思路他已经给了篱笆墙的提示提示你是栅栏密码对应解密即可 4. 最简单的社会主…...
Redisson—分布式服务
一、 分布式远程服务(Remote Service) 基于Redis的Java分布式远程服务,可以用来通过共享接口执行存在于另一个Redisson实例里的对象方法。换句话说就是通过Redis实现了Java的远程过程调用(RPC)。分布式远程服务基于可…...
volatile使用方法
volatile使用方法 编译优化。使用等级3的话,可能将优化了一些变量。 这为什么会开启等第三呢?这是关于单片机的内存容量比较小,所以开启优化的话,可以可以省一些空间,但是如果。会出现些变量的问题,需要通过…...
提升您的 Go 应用性能的 6 种方法
优化您的 Go 应用程序 1. 如果您的应用程序在 Kubernetes 中运行,请自动设置 GOMAXPROCS 以匹配 Linux 容器的 CPU 配额 Go 调度器 可以具有与运行设备的核心数量一样多的线程。由于我们的应用程序在 Kubernetes 环境中的节点上运行,当我们的 Go 应用程…...
计算摄像技术02 - 颜色空间
一些计算摄像技术知识内容的整理:颜色视觉与感知特性、颜色空间和基于彩色滤镜阵列的彩色感知。 文章目录 一、颜色视觉与感知特性 (1)色调 (2)饱和度 (3)明度 二、颜色空间 (1&…...
Pytorch笔记之分类
文章目录 前言一、导入库二、数据处理三、构建模型四、迭代训练五、模型评估总结 前言 使用Pytorch进行MNIST分类,使用TensorDataset与DataLoader封装、加载本地数据集。 一、导入库 import numpy as np import torch from torch import nn, optim from torch.uti…...
【目标检测】——PE-YOLO精读
yolo,暗光目标检测 论文:PE-YOLO 1. 简介 卷积神经网络(CNNs)在近年来如何推动了物体检测的发展。许多检测器已经被提出,而且在许多基准数据集上的性能正在不断提高。然而,大多数现有的检测器都是在正常条…...
Java 数组转集合
数组转集合 如果仅仅这样转化Arrays.asList(数组),导致集合只能查询,无法进行其他操作,因此,对该方法进行优化: List<实体> list1 new ArrayList<>(Arrays.asList(数组))以上方法就可以使用集合的所有操…...
Elasticsearch:ES|QL 查询语言简介
警告:此功能处于技术预览阶段,可能会在未来版本中更改或删除。 Elastic 将尽最大努力解决任何问题,但技术预览版中的功能不受官方 GA 功能的支持 SLA 的约束。在目前的 Elastic Stack 8.10 中此功能还没有提供。 Elasticsearch 查询语言 (ES|…...
qt qml中listview出现卡顿情况时的常用处理方法
如果在qt QML中使用ListView时出现卡顿情况,可能是因为渲染大量的数据或者在模型中进行复杂的数据处理。以下是常用的解决方法: 1. 设置ListView的缓存策略:通过设置ListView的cacheBuffer属性为适当的值,可以提高滚动的流畅性。…...
Elasticsearch基础操作演示总结
一、索引操作 (一)创建索引 创建Elasticsearch(ES)索引是在ES中存储和管理数据的重要操作之一。索引是用于组织和检索文档的结构化数据存储。 当创建Elasticsearch索引时,通常需要同时指定索引的设置(Se…...
Spring 作用域解析器AnnotationScopeMetadataResolver
博主介绍:✌全网粉丝近5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经…...
如何发布一个 NPM 包
首先初始化: npm init 文件夹结构 .gitignore Git 库忽略文件清单.npmignore 不包括在 npm 注册库中的文件清单LECENSE 模块的授权文件README.md 说明文档bin 保存模块可执行文件的文件夹doc 保存模块文档的文件夹example 保存模块实际示例lib 保存模块代码man 保存模块的手册…...
Flask小项目教程(含MySQL与前端部分)
CONTENTS 1. 环境配置2. 快速搭建Flask应用程序 1. 环境配置 首先我们在项目的根目录下创建一个 Python 虚拟环境,打开命令行输入以下指令: python -m venv venv启动虚拟环境: .\venv\Scripts\Activate.ps1如果遇到报错:.\venv…...
Eureka
大家好我是苏麟今天带来Eureka的使用 . 提供者和消费者 在服务调用关系中,会有两个不同的角色: 服务提供者:一次业务中,被其它微服务调用的服务。(提供接口给其它微服务) 服务消费者:一次业务…...
STM32G070RBT6-MCU温度测量(ADC)
1、借助STM32CubeMX生成系统及外设相关初始化代码。 在以上配置后就可以生成相关初始化代码了。 /* ADC1 init function */ void MX_ADC1_Init(void) {/* USER CODE BEGIN ADC1_Init 0 *//* USER CODE END ADC1_Init 0 */ADC_ChannelConfTypeDef sConfig {0};/* USER COD…...
数据结构之带头双向循环链表
目录 链表的分类 带头双向循环链表的实现 带头双向循环链表的结构 带头双向循环链表的结构示意图 空链表结构示意图 单结点链表结构示意图 多结点链表结构示意图 链表创建结点 双向链表初始化 销毁双向链表 打印双向链表 双向链表尾插 尾插函数测试 双向链表头插 …...
adb详细教程(四)-使用adb启动应用、关闭应用、清空应用数据、获取设备已安装应用列表
adb对于安卓移动端来说,是个非常重要的调试工具。本篇介绍常用的adb指令 文章目录 一、启动应用:adb shell am start二、使用浏览器打开指定网址:adb shell am start三、杀死应用进程adb shell am force-stop/adb shell am kill四、删除应用所…...
【Spring Boot】日志文件
日志文件 一. 日志文件有什么用二. 日志怎么用三. ⾃定义⽇志打印1. 在程序中得到⽇志对象2. 使⽤⽇志对象打印⽇志3. ⽇志格式说明 四. 日志级别1. ⽇志级别有什么⽤2. ⽇志级别的分类与使⽤ 五. 日志持久化六. 更简单的⽇志输出—lombok1. 添加 lombok 依赖2. 输出⽇志3. lom…...
图像处理与计算机视觉--第五章-图像分割-Canny算子
文章目录 1.边缘检测算子分类2.Canny算子核心理论2.1.Canny算子简单介绍2.2.Canny算子边缘检测指标2.3.Canny算子基本原理 3.Canny算子处理流程3.1.高斯滤波去噪声化3.2.图像梯度搜寻3.3.非极大值抑制处理3.4.双阈值边界处理3.5.边界滞后技术跟踪3.6.Canny算子边缘检测的特点 4…...
LabVIEW开发教学实验室自动化INL和DNL测试系统
LabVIEW开发教学实验室自动化INL和DNL测试系统 如今,几乎所有的测量仪器都是基于微处理器的设备。模拟输入量在进行数字处理之前被转换为数字量。对于参加电气和电子测量课程的学生来说,了解ADC以及如何欣赏其性能至关重要。ADC的不确定性可以根据其传输…...
数据结构: 数组与链表
目录 1 数组 1.1 数组常用操作 1. 初始化数组 2. 访问元素 3. 插入元素 4. 删除元素 5. 遍历数组 6. 查找元素 7. 扩容数组 1.2 数组优点与局限性 1.3 数组典型应用 2 链表 2.1 链表常用操作 1. 初始化链表 2. 插入节点 3. 删除…...
unity 控制玩家物体
创建场景 放上一个plane,放上一个球 sphere,假定我们的球就是我们的玩家,使用控制键w a s d 来控制球也就是玩家移动。增加一个材质,把颜色改成绿色,把材质赋给plane,区分我们增加的白球。 增加组件和脚…...
指数分布优化器(EDO)(含MATLAB代码)
先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年…...
Java 时间的加减处理
时间的加减处理 Date date new Date(操作时间(类型Date)-(60000*60*1));600001分钟 60000*60*1 1小时...
基于A4988/DRV8825的四路步进电机驱动器
概述 简化板的CNC sheild V3.0,仅保留步进电机速度与方向的控制引脚STEP/DIR、使能端EN、芯片供电VCC\GND,共计11个引脚。PCB四周开设四个M3通孔,以便于安装固定。此外,将板载的焊死的保险丝更改为可更换的保险座保险丝ÿ…...
万字总结网络原理
目录 一、网络基础 1.1认识IP地址 1.2子网掩码 1.3认识MAC地址 1.4一跳一跳的网络数据传输 1.5总结IP地址和MAC地址 二、网络设备及相关技术 2.1集线器:转发所有端口 2.2交换机:MAC地址转换表+转发对应端口 2.3主机:网络分层从上到下封装 2.4主机&路由器:ARP…...
【AI视野·今日CV 计算机视觉论文速览 第262期】Fri, 6 Oct 2023
AI视野今日CS.CV 计算机视觉论文速览 Fri, 6 Oct 2023 Totally 73 papers 👉上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Improved Baselines with Visual Instruction Tuning Authors Haotian Liu, Chunyuan Li, Yuheng Li, Yong Jae Lee大型多模…...
一文搞懂Jenkins持续集成解决的是什么问题
1、持续集成的定义 大师 Martin Fowler 是这样定义持续集成的: 持续集成是一种软件开发实战, 即团队开发成员经常集成他们的工作. 通常, 每个成员每天至少集成一次, 也就意味着每天可能发生多次集成. 持续集成并不能消除Bug, 而是让它们非常容易发现和改正. 根据对项目实战的理…...
市民留言常德论坛常德政府网站/2024年1月新冠高峰期
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼我使用了dd if/dev/sda1 of/dev/sdb1这个命令,想复制分区sda1上的所有数据但是我原本sdb1是150G,dd之后,挂载后变成55G了(df -h输出结果)(也就是sda1的大小 )但是我用fdisk -l 得到的信息还是150G请问这种情况如何解决??acePerso…...
做暖暖小视频免费网站/如何制作自己的网站?
概述有时要在测试环境创建跟生产环境同个用户,但又不知道用户相关的权限,这里提供一个实用的脚本。获取创建用户脚本及权限脚本内容如下:--执行存储过程exec DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,SQLTERMINAT…...
浙江网站建设平台/外贸网站建设优化
CURL安装和使用笔记http://blog.csdn.net/xukai871105/article/details/9323761 CURL下载地址https://curl.haxx.se/dlwiz/ http://winampplugins.co.uk/curl/ 如果是winXP系统会有多个文件,但win7系统只有一个可执行文件curl.exe。curl_7_49_1_openssl_nghttp2_x64…...
网站已备案添加新域名/营销策划公司靠谱吗
title: MySql超长自动截断 tags: mysql自动截断jdbcjdbcCompliantTruncat categories: mysql date: 2017-05-25 18:18:56小伙伴问到一个问题,为啥在项目中调用插入或者更新语句时超长的字无法自动截断,而在navicat中直接执行是可以自动截断的?…...
专业网站设计学校/网站优化推广培训
转载自:http://blog.csdn.net/andycpp/article/details/1327147/ 我们在编写大型程序的时候,需要写成千上万个方法或函数,这些函数的功能可能很强大,但我们在程序中只用到该函数的一小部分功能,并且经过调试可以确定,这…...
塘沽手机网站建设/怎样建立一个网站
程序通过流来管理并发,每个流按顺序执行操作,不同流之间可能并行也可能乱序执行。流的作用是使一个流的计算与另一个流的传输同时进行,能有效提高对GPU的利用率。 流的定义方法,是创建一个cudaStream_t对象,并在启动内…...