在Ubuntu虚拟机/阿里云ECS,命令行终端中,运行如下抓包命令:
tcpdump host iot-sec.itls.cn-shanghai.aliyuncs.com -w lp_id2.pcap
开启一个新命令行终端,运行demo程序(mqtt_id2_demo):
等待MQTT over ID²-iTLS建连成功,日志中出现心跳响应(“heartbeat response”)
中断tcpdump抓包程序,得到指定的抓包数据文件(lp_id2.pcap)
在个人电脑,在命令行(如Windows PowerShell),使用远程拷贝命令将抓包数据文件拷贝到个人电脑上
scp Username@IPaddr:/Path/lp_id2.pcap ./
Username:ECS/Ubuntu虚拟机的用户名
IPaddr:ECS/Ubuntu虚拟机的IP地址,其中ECS使用公网IP
Path:抓包数据文件在虚拟机上的路径
在个人电脑上,使用Wireshark软件(如没有,请先自行安装)打开抓包数据文件(lp_id2.pcap)
在控制栏,分析->启用的协议中,将MQTT勾选取消:
基于抓包数据,进行 ID²-iTLS身份认证和安全通道建立过程分析:
基于ID²的设备端身份认证:
在第一个Client Hello握手报文中,上报设备 ID² ID,到ID²服务端申请认证挑战字(32字节字符串)
通过Hello Verify Request报文,下发ID²认证挑战字;设备端基于挑战字生成 ID²设备端认证码
在第二个Client Hello握手报文中,上报 ID²设备端认证码进行设备身份认证
基于ID²的服务端身份认证:
ID²服务端在认证 ID²设备的同时,生成 ID²服务端认证码,并通过Server Hello报文下发到设备端,进行服务端身份认证
基于ID²的iTLS会话密钥协商:
在Server Hello报文中,同时带有通过ID²服务端加密的PresharedKey(会话密钥派生因子),到设备端通过ID²接口解密
iTLS的设备端和服务端基于相同的PresharedKey派生出会话密钥,用于后续应用数据的加密
基于iTLS会话密钥的应用数据加密:
从如上截图可见,iTLS安全通道建立后,传输的应用数据都通过iTLS加密保护传输(防窃取和篡改)
分析总结:
通过上面的抓包可见,ID²-iTLS通过6个握手报文、1253字节数据量即可完成整个握手过程;在TLS握手过程中,基于ID²(挑战字模式)完成设备端和服务端的身份认证,并加密下发会话密钥派生因子,完成会话密钥的协商,建立安全的数据传输通道。
ID²-iTLS提供双向认证和数据安全传输特性外,相比标准TLS,具有资源占用低(无需解析和处理x509证书复杂的逻辑),握手报文少,握手数据量小等优点,是一个针对物联网(IoT)场景设计的轻量级安全连接协议,提供类似标准TLS的安全能力,同时减少协议对设备和网络的依赖,满足物联网(IoT)对连接安全的需求