本文基于UCloud的物联通信云平台给出具体示例,并附上示例代码。
模块是用ESP8266的NodeMCU。
1. TLS的概述
关于TLS的具体理论可以参考下面5篇文章:
HTTPS协议详解(一):HTTPS基础知识
HTTPS协议详解(二):TLS/SSL工作原理
HTTPS协议详解(三):PKI 体系
HTTPS协议详解(四):TLS/SSL握手过程
HTTPS协议详解(五):HTTPS性能与优化
本文虽然不介绍具体的TLS的具体只是,大概讲解下TCP、MQTT、TLS三者之间的关系。
MQTT是一个应用层协议,可以理解为和HTTP相对应的一层协议,MQTT是目前物联网平台广泛支持的一种用于物联网通信的协议,他的优势是开销小,实现标准,目前主流的云厂商AWS、Aliyun、UCloud的物联网平台都是基于MQTT标准进行通信。MQTT的4层连接协议仍然是TCP,所以是可靠的连接,TLS是在TCP和MQTT之间将MQTT数据包加密再通过TCP传输加密数据。所以MQTT over TLS一般叫做MQTTS。
层级关系:
MQTT
---------
TLS
---------
TCP
2. ESP8266 的Arduino库官方TLS库
ESP8266-Aruino使用的是BearSSL库(ESP32使用的是embedTLS库),具体介绍可以参考文档 ESP8266-Aruino的官方介绍文档和TLS and HTTPS Basics。
BearSSL官方文档
3. 接入物联网平台准备工作
本文物联网平台使用UCloud物联网通信云平台,目前处于公测阶段是免费使用的,参考文档
1) 创建产品、创建设备
2) MQTT连接参数
- clientID:zzau1wz5blfzgltp.zpzqzz98lk8yrvmp
- Username: zzau1wz5blfzgltp|zpzqzz98lk8yrvmp|1
- Password: 90apiwl2txbo9gn6
3) MQTT连接
- Broker address: mqtt-cn-sh2.iot.ucloud.cn
- Port: 8883
- CA证书:下载CA证书(自签名)
4. 实现代码
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <time.h>
#include <PubSubClient.h>
#include "FS.h"
const char *logo_img = \
{
"`],`]. =@@@^ ,/@@@@@@@^ =@@@^ ,@@@@@@@@@` @@@O =@@@. =@@@@@@@@@@` \n"\
" \\=@O. =@@@^ ,@@@@. =@@@^ =@@@^ =@@@^ @@@O =@@@. =@@@`\n"\
" O@@O. =@@@^ O@@@. =@@@^ O@@O. O@@@ @@@O =@@@. =@@@^ .@@@\\\n"\
" O@@O. =@@@^.O@@O =@@@^ .O@@O =@@@. @@@O =@@@. =@@@^ .O@@O\n"\
" O@@O. =@@@^ O@@@. =@@@^ O@@O. O@@@ @@@O =@@@. =@@@^ .@@@O\n"\
" =@@@^ .O@@@. ,@@@@` ,@@@@]. =@@@\\ ./@@@^ \\@@@` ,@@@@ =@@@^ ./@@@^\n"\
" ,@@@@@@@@/ .\\@@@@@@@^ ,\\@@@@@@O ,\\@@@@@@@O` ,@@@@@@@@/ =@@@@@@@@@O` \n"\
};
static const char mqtt_ca_crt[] PROGMEM =