概述
MQTT开源库mosquitto安装和使用(三)使用TLS
- 一、关键接口 mosquitto_tls_set
- 二、tls双向认证官方示例代码
- 三、说明
一、关键接口 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
1、 必须在mosquitto_connect之前调用。
2、 不能和mosquitto_tls_psk_set同时用。
3、 如果接的服务器需要客户端提供证书,请使用您的客户端证书和私钥定义certfile和keyfile。如果私钥是加密的,请提供一个密码回调函数,否则您将不得不在命令行输入密码。
参数:
mosq:mosquitto实例
cafile:PEM格式的可信CA文件
capath:包含PEM格式的可信CA文件的路径。Cafile和capath不能都为空。
certfile:包含PEM编码格式的客户端证书,
keyfile:包含PEM编码格式的客户端私钥。若certfile为NULL,这里也必须为NULL。
pw_callback:如果keyfile加密,则需要设置此回调进行传入正确的密码。如果设置为NULL,密码必须通过命令行输入。
回调函数:int (*pw_callback)(char *buf, int size, int rwflag, void *userdata)
buf:回调中写入密码的缓存
size:buf的字节数容量
userdata:mosquitto实例
返回:密码字节数
返回:
成功:MOSQ_ERR_SUCCESS
MOSQ_ERR_INVAL:输入参数不合法
MOSQ_ERR_NOMEM:内存不足
二、tls双向认证官方示例代码
示例位置:mosquittomosquitto-1.6.9testlibc 8-ssl-connect-cert-auth.c
#include <errno.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <mosquitto.h>
static int run = -1;
void on_connect(struct mosquitto *mosq, void *obj, int rc)
{
if(rc){
exit(1);
}else{
mosquitto_disconnect(mosq);
}
}
void on_disconnect(struct mosquitto *mosq, void *obj, int rc)
{
run = rc;
}
int main(int argc, char *argv[])
{
int rc;
struct mosquitto *mosq;
int port = atoi(argv[1]);
mosquitto_lib_init();
mosq = mosquitto_new("08-ssl-connect-crt-auth", true, NULL);
mosquitto_tls_set(mosq, "../ssl/test-root-ca.crt", "../ssl/certs", "../ssl/client.crt", "../ssl/client.key", NULL);
mosquitto_connect_callback_set(mosq, on_connect);
mosquitto_disconnect_callback_set(mosq, on_disconnect);
rc = mosquitto_connect(mosq, "localhost", port, 60);
while(run == -1){
mosquitto_loop(mosq, -1, 1);
}
mosquitto_lib_cleanup();
return run;
}
三、说明
1、客户端使用双向认证连接服务器时,需要准备好证书相关文件
(1)CA根证书;
(2)客户端证书;
(3)客户端私钥;
2、mosquitto_connect中参数的host需要使用与证书对应的域名,否则不能通过对服务器证书的校验,客户端会报错误。
若通过mosquitto_tls_opts_set设置不校验,则会返回rc值为7的disconnect事件。从wireshark抓包角度看,客户端不断地断连现象。
最后
以上就是奋斗航空为你收集整理的MQTT开源库mosquitto安装和使用(三)使用TLS一、关键接口 mosquitto_tls_set二、tls双向认证官方示例代码三、说明的全部内容,希望文章能够帮你解决MQTT开源库mosquitto安装和使用(三)使用TLS一、关键接口 mosquitto_tls_set二、tls双向认证官方示例代码三、说明所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复