非常详细的MQTT+TLS(三)----TLS篇

非常详细的MQTT+TLS----TLS篇

多的不说少的不唠,这篇文章没有理论只有经验!

1、移植

有了前面MQTT的移植,相信大家也都了解了这种软件包的套路
在这里插入图片描述
我下载的是【mbedtls-mbedtls-2.23.0】,文件夹目录如上图所示,其中大部分文件都是示例及说明等。TLS移植时最麻烦的应该就是config文件的配置,内容很多,在这里给出一个对接成功的config文件供参考。【超链接】
与MQTT类似SSL也需要我们配置net_sockets.c,该文件内部用于创建TCP以及读写的底层函数,如果你使用的平台支持lwip库那恭喜你,你不需要关心这部分了。

2、握手

SSL握手是一个非常复杂的过程,在【mbedtls_ssl_handshake】中一共分成了16步,具体流程网上很多,为了描述方便在网上找了两张图粘在这里(一定要仔细看这两张图,清晰的了解握手过程更容易分析遇到的问题)
在这里插入图片描述
在这里插入图片描述
在这里列出几个在握手中容易出现的错误:

①LOG:“tls in_left: 0, nb_want: 5”、"ssl->f_recv(_timeout) ret=0"出现如下两个LOG之后返回错误码,一般是在SSL获取数据失败,该问题一般由Socket读数据有问题或是读数据超时处理存在问题。

LOG:"client state: 3"问题出现在这里时是由于校验服务器根证书失败。这个失败的原因由很多,可能是①中说的读Socket函数存在问题,也可能是随机数生成函数存在问题。【mbedtls_ssl_conf_rng:随机数生成函数由该函数注册】,也有可能是验证hostname失败导致【mbedtls_ssl_set_hostname函数配置hostname】。具体失败查看【mbedtls_ssl_parse_certificate→mbedtls_x509_crt_verify_with_profile】中的参数“flags”的值。Flags=0x08则是随机数不对,flags=0x04则是hostname不匹配;至于其他的,就需要各位自己努力了。

一般握手时证书认证通过了下面的过程都是水到渠成了(反正我在后面是没遇到问题)。


----------努力学习,乐于分享,欢迎讨论----------


猜你喜欢

转载自blog.csdn.net/qq_43448742/article/details/108266716
TLS