目录

问题描述

解决方法

对于mosquitto库的C程序

 对mosquitto命令行


问题描述

今天在进行测试mosquitto的TLS/SSL出现如下错误,表明错误是出现在tls版本上:

经过了解可知mosquitto_pub和mosquitto_sub的tls版本默认为tlsv1.2,然而在我的虚拟机中openssl的版本是1.1.1,且在mosquitto.conf中配置tls_version tlsv1.1(这里配置的是单向认证,双向认证也适用),所以会出现tls版本错误。

 


解决方法

对于mosquitto库的C程序

在使用APImosquitto_tls_set()前提下再附加上mosquitto_tls_opts_set(),此API可以设置客户端相应的tls版本,注意tls版本默认为tlsv1.2。

代码如下:

int    rc = -1;

rc = mosquitto_tls_opts_set(mosq, 1, "tlsv1.1", NULL);
if( rc != MOSQ_ERR_SUCCESS )
{
    printf("mosquitto_tls_opts_set failure.\n");
    exit(1);
}

rc = mosquitto_tls_set(mosq, CAFILE, CAPATH, CERTFILE, KEYFILE, NULL);
if( rc != MOSQ_ERR_SUCCESS )
{
    printf("mosquitto_tls_set failure.\n");
    exit(1);
}

 对mosquitto命令行

以下是测试单向认证(若为双向认证,自行加上证书以及密钥)

mosquitto_pub -h 192.168.222.130 -p 8884 -t "hello" -m "hi sub" --tls-version tlsv1.1 --cafile ./ca/ca.crt

mosquitto_sub -h 192.168.222.130 -p 8884 -t "hello" --tls-version tlsv1.1 --cafile ./ca/ca.crt

 成功解决问题,可以正常连上:

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐