HTTPS概述
HTTPS的安全性是基于Transport Layer Security (TLS), TLS是一種網(wǎng)絡(luò)加密通信的方式,作為Secure Sockets Layer (SSL)的接續(xù)協(xié)議,TLS允許客戶端與服務(wù)端的互相驗(yàn)證。TLS以憑證為概念,憑證包含:公鑰、服務(wù)器身份、憑證頒發(fā)單位的簽名。對應(yīng)的私鑰永遠(yuǎn)不會公開,任何使用私鑰加密的密鑰數(shù)據(jù)只能用公鑰來解密,反之亦然。整個加密通信流程,可以透過圖1來簡單描述:1.客戶端發(fā)起hello交握:給服務(wù)器的訊息有:
- 包含時間戳的32位隨機(jī)數(shù)字client_random
- 加密協(xié)定
- 客戶端支持的加密方式
2. 服務(wù)端必須要有一套證書,可以自制或向組織申請。自己頒發(fā)的證書需要客戶端驗(yàn)證通過,才可以繼續(xù)訪問,使用受信任單位申請的證書不會彈出提示頁面。3. 一對公鑰和私鑰,可以想象成一把鑰匙(私鑰)和一個鎖頭(公鑰),把鎖頭給客戶端將重要的數(shù)據(jù)鎖起來,客戶端將鎖好的數(shù)據(jù)傳給服務(wù)器,只有服務(wù)器有開鎖的鑰匙可以解開,所以即使傳送過程被截取也無法破解。4. 對于客戶端的hello交握,服務(wù)端響應(yīng)以下訊息給客戶端:
- 另一個包含時間戳的32位隨機(jī)數(shù)字server_random
- 加密協(xié)定
- 加密方式
- 服務(wù)器證書:包含擁有者名稱、網(wǎng)站地址、證書公鑰、證書頒發(fā)機(jī)構(gòu)數(shù)字簽名、過期時間等。
5. 客戶端驗(yàn)證服務(wù)器傳來的憑證是否有效?例如頒發(fā)機(jī)構(gòu)、過期時間等,如果發(fā)現(xiàn)異常,則會彈出一個警告框,提示證書存在問題。(本應(yīng)用筆記不是使用第三方證書授權(quán)中心(CA)簽發(fā)的憑證,而是使用自己頒發(fā)的憑證,所以客戶端必須先取得簽發(fā)機(jī)構(gòu)的公鑰(下一節(jié)的kvm5.pem)來驗(yàn)證頒發(fā)機(jī)構(gòu)簽名,才不會彈出警告框)6. 在此之前的所有TLS交握訊息都是明文傳送,現(xiàn)在收到服務(wù)器的證書且驗(yàn)證沒問題,則客戶端先產(chǎn)生PreMaster_Secret
- 使用加密算法,例如:RSA, Diffie-Hellman,對server_random運(yùn)算產(chǎn)生。
- 或稱PreMaster_Key
- 是一個48個位的Key,前2個字節(jié)是協(xié)議版本號,后46字節(jié)是用在對稱加密密鑰的隨機(jī)數(shù)字。
7. 客戶端用服務(wù)端送來的公鑰加密PreMaster_Secret。8. 客戶端將加密的PreMaster_Secret傳送給服務(wù)端,目的是讓服務(wù)端可以像客戶端用一樣隨機(jī)值產(chǎn)生Master_Secret。9. 服務(wù)端用私鑰解密PreMaster_Secret。
- 此時客戶端與服服務(wù)端都有一份相同的PreMaster_Secret和隨機(jī)數(shù)client_random, server_random。
- 使用client_random及server_random當(dāng)種子,結(jié)合PreMaster_Secret,客戶端和服務(wù)端將計算出同樣的Master_Secret。
- 作為資料加解密相關(guān)的Key Material。
10. 作為資料加解密相關(guān)的Key Material。11. 作為資料加解密相關(guān)的Key Material。圖1. HTTPS原理
例 HTTPS服務(wù)器
功能簡介
本示例需要使用到EMAC的功能,搭配LwIP協(xié)議棧,此協(xié)議棧有提供HTTPS的API, 但會使用到mbed TLS的加密功能,這包庫從Keil的官方網(wǎng)站或是透過Keil內(nèi)的Pack Installer可以獲得。圖2. 透過Run-Time管理器加入mbed TLS
資源準(zhǔn)備
1) 硬件環(huán)境:對應(yīng)產(chǎn)品型號的AT-START BOARD2) 軟件環(huán)境at32f4xx\project\mdk_v5
軟件設(shè)計
1) 配置流程
- 配置EMAC功能
- 初始化LwIP協(xié)議棧
- 配置私鑰及CA憑證給服務(wù)器
- 初始化HTTPS服務(wù)器
2) 代碼介紹
- ssl_server函數(shù)代碼描述
使用OpenSSL建立自簽憑證
在本應(yīng)用筆記中,我們將使用自簽憑證來建立TLS聯(lián)機(jī),而發(fā)行自簽憑證會使用到OpenSSL這個工具,以下會簡單介紹在Windows上及在Linux Ubuntu上,如何安裝OpenSSL。
- Windows
因?yàn)镺penSSL未提供可執(zhí)行的安裝檔,因此我們透過Git for Windows來達(dá)到安裝OpenSSL的目的;當(dāng)安裝完成后,默認(rèn)執(zhí)行文件路徑為C:\ProgramFiles\Git\usr\bin\openssl.exe,你可以將C:\Program Files\Git\usr\bin路徑加入到PATH環(huán)境變量之中,以后就可以直接輸入openssl來執(zhí)行此工具。
- Ubuntu
只需要在終端機(jī)中下命令在確定PC上有OpenSSL這個工具后,基本上只要按照以下步驟,就一定可以建立出合法的自簽憑證:1.?建立ssl.conf配置文件
上述配置文件內(nèi)容的[dn]區(qū)段(Distinguished Name)為憑證的相關(guān)信息,你可以自由調(diào)整為你想設(shè)定的內(nèi)容,其中O(Organization)是公司名稱,OU(Organization Unit)是部門名稱,而CN(Common Name)則是憑證名稱,你可以設(shè)定任意名稱,設(shè)定中文也可以,但請記得檔案要以UTF-8編碼存盤,且不能有BOM字符。配置文件的[alt_names]區(qū)段,則是用來設(shè)定SSL憑證的域名,這部分設(shè)定相當(dāng)重要,如果沒有設(shè)定的話,許多瀏覽器都會將憑證視為無效憑證。這部分你要設(shè)定幾組域名都可以,基本上沒有什么上限,因?yàn)樽院瀾{證主要目的是用來開發(fā)測試之用,因此建議可以把可能會用到的本機(jī)域名(localhost)或是局域網(wǎng)絡(luò)的IP地址都加上去,以便后續(xù)進(jìn)行遠(yuǎn)程聯(lián)機(jī)測試。2.?打開終端機(jī)工具后,切換到存放ssl.conf的目錄下后,透過OpenSSL命令產(chǎn)生出自簽憑證與相對應(yīng)的私鑰,輸入以下命令就可以建立出私鑰(server.key)與憑證檔案(server.crt):
生成的私鑰與憑證檔案會跟ssl.conf在同一個目錄下。3.?匯入自簽憑證到「受信任的跟證書授權(quán)單位」光是建立好自簽憑證還是不夠的,網(wǎng)站服務(wù)器也設(shè)定正確才行,這畢竟是一個PKI基礎(chǔ)架構(gòu),你還必須讓所有需要安全聯(lián)機(jī)的端點(diǎn)都能互相信任才行,因此你還須將建立好的自簽憑證安裝到「受信任的跟證書授權(quán)單位」之中,這樣子你的操作系統(tǒng)或?yàn)g覽器才能將你的自簽憑證視為「可信任的聯(lián)機(jī)」。以下為手動匯入的步驟:
- 開啟檔案總管,并鼠標(biāo)雙擊server.crt檔案
- 點(diǎn)擊「安裝憑證」按鈕
- 選取「目前使用者」并按「下一步」繼續(xù)
- 選取「將所有憑證放入以下的存放區(qū)」并按下「瀏覽」按鈕
- 選取「受信任的跟證書授權(quán)單位」并按下「確定」
- 按「下一步」繼續(xù)
- 按「完成」繼續(xù)
- 在安全性警告窗口按下「是(Y)」即可完成設(shè)定
4.將私鑰及憑證匯入到TLS serverTLS server負(fù)責(zé)解密數(shù)據(jù),在本應(yīng)用筆記中就是MCU端,分別將私鑰及憑證填入demo code中的mbedtls_test_srv_key及mbedtls_test_srv_crt即可。
實(shí)驗(yàn)效果
- 瀏覽器的網(wǎng)址以HTTPS開頭,且鎖頭圖示為上鎖的狀態(tài)
圖3. HTTPS頁面
-
mcu
+關(guān)注
關(guān)注
146文章
17718瀏覽量
358160 -
服務(wù)器
+關(guān)注
關(guān)注
12文章
9596瀏覽量
86966 -
https
+關(guān)注
關(guān)注
0文章
54瀏覽量
6447 -
雅特力
+關(guān)注
關(guān)注
0文章
177瀏覽量
8400
發(fā)布評論請先 登錄
相關(guān)推薦
雅特力AT32F407/407A系列MCU,可輕松替換STM32F107/207/407
如何基于HTTP Web服務(wù)器示例實(shí)現(xiàn)TLS HTTPS服務(wù)器?
AT32 MCU QSPI應(yīng)用說明
雅特力攜高效能AT32 MCU“芯”動亮相ICCAD 2020
雅特力攜高性能AT32 MCU精彩亮相全球MCU生態(tài)發(fā)展大會

雅特力攜高性能AT32 MCU精彩亮相D Forum 2021 微控制器論壇

雅特力攜高性能AT32 MCU精彩亮相全球MCU生態(tài)發(fā)展大會

雅特力展臺首日速遞,AT32 MCU精彩亮相

雅特力AT32 MCU實(shí)現(xiàn)高效電機(jī)驅(qū)動控制與應(yīng)用

雅特力AT32 MCU與SEGGER攜手合作,開發(fā)量產(chǎn)事半功倍

評論