SSL協(xié)議工作在傳輸層與應(yīng)用層協(xié)議之間,為數(shù)據(jù)通訊提供安全支持。TLS 1.0是IETF(Internet工程任務(wù)組)制定的一種新的通信協(xié)議,TLS是建立在SSL 3.0協(xié)議規(guī)范之上。
認(rèn)證客戶端和服務(wù)器,以確保數(shù)據(jù)收發(fā)對象的合法性;
加密數(shù)據(jù),以確保數(shù)據(jù)包的完整;
保證數(shù)據(jù)的正確性,避免傳輸過程中數(shù)據(jù)被篡改。
在TLS握手階段,客戶端首先向服務(wù)端提供以下信息:
支持的協(xié)議版本,比如TLS 1.1版;
客戶端生成的隨機(jī)數(shù);
客戶端支持的加密方法,比如DES、3DES、AES等;
支持的壓縮方法。
服務(wù)端在接收到客戶端的Client Hello之后服務(wù)器的回應(yīng)包含以下內(nèi)容:
確定在后續(xù)通訊過程中需要使用的TLS協(xié)議版本;
一個(gè)服務(wù)器生成的隨機(jī)數(shù),稍后用于生成"對話密鑰";
服務(wù)器生成的隨機(jī)數(shù);
服務(wù)器證書。
Client Key Exchange
如果服務(wù)端需要對客戶端進(jìn)行驗(yàn)證,在客戶端收到服務(wù)端的Server Hello消息之后,首先需要向服務(wù)端發(fā)送客戶端的證書,讓服務(wù)端來驗(yàn)證客戶端的合法性。
Certificate Verify
接著,客戶端需要對服務(wù)端的證書進(jìn)行檢查,然后,向服務(wù)器發(fā)送下面三項(xiàng)信息:
一個(gè)用服務(wù)器公鑰加密的隨機(jī)數(shù)
編碼改變通知,表示隨后的信息都將用雙方商定的加密方法和密鑰發(fā)送
客戶端握手完成的通知(即前面所有通訊內(nèi)容的hash值)
服務(wù)端會使用協(xié)商出來的密鑰,加密一段finish消息發(fā)送給客戶端,客戶端若能正確解析,則證明協(xié)商成功,可以正常進(jìn)行后續(xù)的應(yīng)用層數(shù)據(jù)收發(fā)。
在所有的握手階段都完成之后,就可以開始傳送應(yīng)用數(shù)據(jù)了。
在ESP32芯片模塊上建立SSL/TLS通信工程
可以參考IDF的示例工程 “https_mbedtls” “mqtt_ssl_example_test”等。
1、CA證書,TLS在驗(yàn)證服務(wù)器證書時(shí)需要用服務(wù)器的證書發(fā)布機(jī)構(gòu)(CA)的證書(即根證書),該證書是CA給自己頒發(fā)的證書,且通過該證書為服務(wù)器頒發(fā)證書,客服端通過根證書驗(yàn)證服務(wù)器下發(fā)的證書。瀏覽器內(nèi)置了根證書鏈,所以我們通過瀏覽器上網(wǎng)時(shí),不需要手動添加證書。ESP32上面可以選擇將SDK內(nèi)置根證書鏈編譯到程序內(nèi)部,這樣就能在面對大部分服務(wù)器時(shí)都能不需要指定根證書,但若要添加或者證書更新,則需要下載新的根證書捆綁包編譯后,更新程序才能替換。同時(shí)也可以配置目標(biāo)服務(wù)器的CA證書。
2、客戶端證書與公鑰,若要使用TLS雙向驗(yàn)證,則需要服務(wù)器下發(fā)客戶端證書與客戶端公鑰,在ESP32中若服務(wù)器要驗(yàn)證客戶端證書,僅需將服務(wù)器為客戶端生成的證書與密鑰填入TLS庫相應(yīng)位置。
1、crt_bundle_attach與esp_crt_bundle_attach,在初始化esp_tls_cfg_t結(jié)構(gòu)體的時(shí)候,若設(shè)置了crt_bundle_attach的函數(shù)為esp_crt_bundle_attach,則TLS庫在校驗(yàn)服務(wù)器證書的時(shí)候,會從編譯進(jìn)代碼區(qū)的CA捆包來查找并驗(yàn)證服務(wù)器證書,而不需要手動設(shè)置,具體參考樂鑫手冊(若使用證書捆綁包,程序會大60k左右)。
esp_tls_cfg_t cfg = {
.clientcert_buf = (const unsigned char *) client_cert_pem_start,
.clientcert_bytes = sizeof(client_cert_pem_start),
.clientkey_buf = client_key_cert_pem_start,
.clientkey_bytes = sizeof(client_key_cert_pem_start),
.crt_bundle_attach = esp_crt_bundle_attach,
};
2、若要跳過服務(wù)器證書驗(yàn)證,通過idf.py menuconfig配置使能Component config->ESP-TLS->[*] Allow potentially insecure options->[*] Skip server ...,并且tls config結(jié)構(gòu)體中去掉cert_pem證書,
3.1、服務(wù)器需要配置一個(gè)受信任的證書
3.2、客戶端的證書需要客戶端通過自簽名CA,且給客戶端生成證書與密鑰
3.3、skip_common_name,可以跳過對于服務(wù)器證書的"CN"字段的驗(yàn)證,若使能該設(shè)置,對于服務(wù)器自簽證書,可能會有幫助。
今天的分享就到這里啦,EBYTE每一天都致力于更好的助力物聯(lián)化、智能化、自動化的發(fā)展,提升資源利用率,更多產(chǎn)品更多資料,感興趣的小伙伴可以登錄我們的億佰特官網(wǎng)進(jìn)行了解,也可以直接撥打400電話咨詢技術(shù)專員!
相關(guān)閱讀:
2、單片機(jī)系統(tǒng)針對網(wǎng)絡(luò)加密通訊的優(yōu)化方法
3、一文看懂IO基礎(chǔ)知識和單片機(jī)GPIO工作模式簡介
7 X 24 銷售服務(wù)熱線
4000-330-990深圳辦事處柯經(jīng)理:18218726658 杭州辦事處戴經(jīng)理:17512568697
常州辦事處崔經(jīng)理:15906110783 南京辦事處葛經(jīng)理:17626012283
業(yè)務(wù)郵箱:support@cdebyte.com
全國銷售投訴電話:19934352316
地址:四川省成都市高新西區(qū)西區(qū)大道199號B5棟(前臺座機(jī):028-61543675)
?? 成都億佰特電子科技有限公司【版權(quán)所有】 蜀ICP備13019384號-3