在Ubuntu虛擬機/阿里云ECS,命令行終端中,運行如下抓包命令:
tcpdump host iot-sec.itls.cn-shanghai.aliyuncs.com -w lp_id2.pcap
開啟一個新命令行終端,運行demo程序(mqtt_id2_demo):
等待MQTT over ID2-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勾選取消:
基于抓包數據,進行 ID2-iTLS身份認證和安全通道建立過程分析:
基于ID2的設備端身份認證:
在第一個Client Hello握手報文中,上報設備 ID2 ID,到ID2服務端申請認證挑戰字(32字節字符串)
通過Hello Verify Request報文,下發ID2認證挑戰字;設備端基于挑戰字生成 ID2設備端認證碼
在第二個Client Hello握手報文中,上報 ID2設備端認證碼進行設備身份認證
基于ID2的服務端身份認證:
ID2服務端在認證 ID2設備的同時,生成 ID2服務端認證碼,并通過Server Hello報文下發到設備端,進行服務端身份認證
基于ID2的iTLS會話密鑰協商:
在Server Hello報文中,同時帶有通過ID2服務端加密的PresharedKey(會話密鑰派生因子),到設備端通過ID2接口解密
iTLS的設備端和服務端基于相同的PresharedKey派生出會話密鑰,用于后續應用數據的加密
基于iTLS會話密鑰的應用數據加密:
從如上截圖可見,iTLS安全通道建立后,傳輸的應用數據都通過iTLS加密保護傳輸(防竊取和篡改)
分析總結:
通過上面的抓包可見,ID2-iTLS通過6個握手報文、1253字節數據量即可完成整個握手過程;在TLS握手過程中,基于ID2(挑戰字模式)完成設備端和服務端的身份認證,并加密下發會話密鑰派生因子,完成會話密鑰的協商,建立安全的數據傳輸通道。
ID2-iTLS提供雙向認證和數據安全傳輸特性外,相比標準TLS,具有資源占用低(無需解析和處理x509證書復雜的邏輯),握手報文少,握手數據量小等優點,是一個針對物聯網(IoT)場景設計的輕量級安全連接協議,提供類似標準TLS的安全能力,同時減少協議對設備和網絡的依賴,滿足物聯網(IoT)對連接安全的需求