設備身份認證技術
物聯網系統安全離不開設備的身份認證和訪問授權,我們現在已經在使用不同協議層上的身份認證技術,比如鏈路層的802.1x,傳輸層的TLS,應用層的OAuth2.0等。

802.1x協議是起源于802.11的訪問控制和認證協議,基于C/S機構,可以限制未經授權的設備通過接入端口訪問LAN/WLAN。在認證通過之前,802.1x只允許EAPOL(基于局域網的擴展認證協議)數據通過設備連接的交換機端口;認證通過以后,業務數據方可通過以太網端口。
OAuth協議其實不是一個認證協議,而是一個授權協議。OAuth開放授權標準允許用戶授權第三方應用訪問他們存儲在另外的服務提供者上的部分信息,而不需要將用戶名和密碼提供給第三方應用。目前OAuth1.0協議已經不再使用,主要使用的是OAuth2.0協議。現在很多移動應用或網站上都是用微信授權登錄,這里就是使用了OAuth2.0協議。
大部分物聯網協議,如MQTT、HTTP等都是基于TCP的,從安全考慮,物聯網系統通常都需要使用加密協議來進行數據傳輸,如MQTTS、HTTPS等。這些協議都是基于傳輸層安全協議TLS(Transport Layer Security)來實現的,因此TLS也是物聯網系統最主要的安全認證手段,其他認證手段可以作為補充。本文將重點介紹TLS協議。
傳輸層安全TLS
TLS協議前身是安全套接層(SSL: Secure Sockets Layer),SSL/TLS就是在TCP層上加了一層加密,這樣就保證上層信息傳輸的安全。HTTP 協議是明文傳輸,加上 SSL 層之后,就變成了HTTPS。

SSL/TLS與HTTP/TCP的關系
SSL最初是由網景公司(Netscape)研發,后被IETF(互聯網工程任務組)標準化后寫入RFC(Request for Comment)中,改為TLS。我們現在用的都是TLS協議,但由于大家習慣了SSL這個稱呼,所以一般還稱為SSL。
TLS認證過程
TLS的認證過程依賴于握手完成。

TLS握手
1.Client Hello
握手第一步是客戶端向服務端發送 Client Hello 消息。這個消息里包含了一個客戶端生成的隨機數 Random1、客戶端支持的加密套件(Support Ciphers)和 SSL Version 等信息。
2.Server Hello
第二步是服務端向客戶端發送 Server Hello 消息,這個消息會從 Client Hello 傳過來的 Support Ciphers 里確定一份加密套件,這個套件決定了后續加密和生成摘要時具體使用哪些算法,另外還會生成一份隨機數 Random2。至此客戶端和服務端都擁有了兩個隨機數(Random1+ Random2)。
3.Certificate
這一步是服務端將自己的證書下發給客戶端,讓客戶端驗證自己的身份,客戶端驗證通過后取出證書中的公鑰。
4.Server Hello Done
Server Hello Done 通知客戶端 Server Hello 過程結束。
5.Client Key Exchange
客戶端根據服務器傳來的公鑰生成了 PreMaster Key,這一步就是將這個 key 傳給服務端,服務端再用自己的私鑰解出這個 PreMaster Key 得到客戶端生成的 Random3。至此,客戶端和服務端都擁有 Random1 + Random2 + Random3,兩邊再根據同樣的算法就可以生成一份秘鑰,握手結束后的應用層數據都是使用這個秘鑰進行對稱加密。
之所以要使用三個隨機數,是因為整個握手過程的數據都是明文傳輸的,用多個隨機數種子來生成秘鑰不容易被暴力破解。
6.Change Cipher Spec(Client)
這一步是客戶端通知服務端后面再發送的消息都會使用前面協商出來的秘鑰加密了,是一條事件消息。
7.Client Finish
客戶端將前面的握手消息生成摘要再用協商好的秘鑰加密,這是客戶端發出的第一條加密消息。服務端接收后會用秘鑰解密,能解出來說明前面協商出來的秘鑰是一致的。
8.Change Cipher Spec(Server)
這一步是服務端通知客戶端后面再發送的消息都會使用加密。
9.Server Finish
這一步服務端也會將握手過程的消息生成摘要再用秘鑰加密,這是服務端發出的第一條加密消息。客戶端接收后會用秘鑰解密,能解出來說明協商的秘鑰是一致的。
到這里,雙方已安全地協商出了同一份秘鑰,所有的應用層數據都會用這個秘鑰加密后再通過 TCP 進行可靠傳輸。

TLS雙向認證
客戶端依賴于服務器的證書來完成對服務器的身份認證,基于安全性考慮,物聯網場景中可能還會要求客戶端向服務端上報證書,實現雙向認證(如上圖所示)。
我會持續更新關于物聯網、云原生以及數字科技方面的文章,用簡單的語言描述復雜的技術,也會偶爾發表一下對IT產業的看法,歡迎大家關注,謝謝。