嵌入式開發(fā)可能既困難又昂貴,但本文展示如何在30分鐘內(nèi),在一種成本超低的設(shè)備上安裝好安全的嵌入式Web服務(wù)器,以便在WiFi芯片上運(yùn)行FreeRTOS和lwIP TCP/IP堆棧。
為什么要使用安全(TLS)的服務(wù)器?
瀏覽器已經(jīng)開始將標(biāo)準(zhǔn)(HTTP)服務(wù)器在瀏覽器欄中標(biāo)記為“不受信任”(參見下面的圖2),而安全服務(wù)器對(duì)最終用戶來說將更加值得信賴。我將在本文下面的安全注意事項(xiàng)部分詳細(xì)介紹。
WiFi芯片ESP8266和Minnow服務(wù)器
1美元即可買到ESP8266芯片,但我建議使用帶USB接口的線路板。更新固件需要USB接口。如果沒有板載USB,則需要額外的步驟,比如使用USB-TTL轉(zhuǎn)換器。一個(gè)現(xiàn)成的帶USB接口的ESP8266線路板只需3美元可以購(gòu)買到。
低成本的ESP8266 WiFi芯片非常適合學(xué)習(xí)之用,但速度很慢,特別是在執(zhí)行諸如加密等CPU密集型任務(wù)時(shí)。在使用慢速芯片來處理CPU密集型任務(wù)時(shí),確實(shí)需要慎重考慮你的設(shè)計(jì)。
ESP8266以80 Mhz的頻率運(yùn)行,這對(duì)嵌入式芯片來說還算可以,但代碼執(zhí)行速度比較慢,因?yàn)榇a要通過SPI內(nèi)存執(zhí)行。在超過資源受限微控制器的實(shí)際限制時(shí),在此設(shè)備上運(yùn)行啟用TLS的服務(wù)器可提供真正的喚醒呼叫,并提供對(duì)可在慢速微控制器上運(yùn)行的內(nèi)容的精彩介紹。選擇合適的安全Web服務(wù)器類型和Web應(yīng)用程序設(shè)計(jì)對(duì)于速度較慢的設(shè)備至關(guān)重要。
在本文中,我將解釋如何在ESP8266上編譯和運(yùn)行Minnow服務(wù)器。Minitow服務(wù)器和參考示例在GitHub上可以找到。
我最近在embedded.com上發(fā)表了一篇關(guān)于Minnow服務(wù)器的文章。該篇文章介紹了如何使用Minnow服務(wù)器創(chuàng)建一個(gè)基于Web的現(xiàn)代設(shè)備管理應(yīng)用程序。本文還探討了在使用TLS時(shí)將WebSocket服務(wù)器與所謂的單頁(yè)應(yīng)用程序(SPA)結(jié)合使用的好處。我建議讀者先閱讀一下這篇文章,因?yàn)槲覀儗镋SP8266準(zhǔn)備和編譯相同的示例代碼。
入門
我們將使用由esp-open-rtos項(xiàng)目提供的ESP8266 FreeRTOS/lwIP環(huán)境,但不用擔(dān)心,你不需要經(jīng)歷一遍復(fù)雜的esp-open-rtos設(shè)置過程。相反,我們將利用預(yù)先配置好且完全準(zhǔn)備好使用的環(huán)境,這個(gè)環(huán)境就是一個(gè)易于使用的基于Web的IDE.
下載FreeRTOS/lwIP ESP8266 IDE
導(dǎo)航到Real Time Logic并下載我們已經(jīng)準(zhǔn)備好的ESP8266 IDE。這一IDE專為教育目的而設(shè)計(jì),包括一個(gè)預(yù)先配置好的esp-open-rtos,并綁定好了可簡(jiǎn)單使用的基于Web的C語(yǔ)言源代碼IDE。IDE需要VmWare或VirtualBox,我本人更喜歡VmWare勝過VirtualBox,因?yàn)槲野l(fā)現(xiàn)前者更容易使用。而且,請(qǐng)注意,VmWare對(duì)于非商業(yè)用途是免費(fèi)的。
ESP8266 IDE還包括一個(gè)嵌入式TLS堆棧(SharkSSL),Minnow服務(wù)器在使用SharkSSL編譯時(shí)會(huì)自動(dòng)使用TLS。
您可以在沒有ESP8266線路板的情況下開始使用ESP8266 IDE,但無法上載和運(yùn)行已編譯過的代碼。換句話說,您可以下載IDE并按照本教程中的所有步驟完成操作,除了在ESP8266上運(yùn)行代碼。
圖1中的屏幕截圖顯示了虛擬機(jī)及與其相連的基于Web的IDE。請(qǐng)注意虛擬機(jī)是如何獲得ESP8266 USB連接的所有權(quán)?;赪eb的IDE檢測(cè)到此情況,便顯示ESP8266已連接,并準(zhǔn)備使用新固件進(jìn)行更新。
圖1:基于Web的IDE連接到虛擬機(jī)的IP地址。
圖1中的屏幕截圖顯示ESP8266通過一塊面包板連接到LED。除非您想要控制本示例應(yīng)用程序中使用的外部LED,否則不需要額外的LED或面包板。
請(qǐng)注意,你的VM的IP地址很可能與圖1中的不同。確保在虛擬機(jī)窗口中單擊IP地址。如果窗口為空白,請(qǐng)單擊窗口,然后按Enter鍵。您必須在瀏覽器中輸入此IP地址才能打開Web IDE。
安裝Minnow Server和示例代碼
Minnow Server參考示例不包含在ESP8266 IDE中,必須單獨(dú)安裝。圖1顯示了已安裝在“ESP/ms”目錄下的Minnow Server示例。必須從Linux命令行安裝Minnow Server,但如果您沒有使用Linux,也不要擔(dān)心。您只需復(fù)制并粘貼我們準(zhǔn)備好的命令即可。下圖顯示了粘貼到Linux Web shell中的Minnow Server安裝命令的屏幕截圖,可從http://vm-ip-address/webshell/獲得。
圖2:粘貼到Linux Web shell中的Minnow Server安裝命令。
當(dāng)您在瀏覽器中輸入Web shell的URL時(shí),系統(tǒng)將提示您登錄。用戶名為sharkssl,密碼為SharkSSL。
GitHub上的ESP8266教程解釋了如何配置虛擬機(jī)、安裝所有內(nèi)容、編譯Web服務(wù)器示例,以及刷新固件等。以下視頻通過逐步解釋簡(jiǎn)化了操作過程。
安全與非安全
Minnow Server可以在安全或非安全模式下使用,而在與ESP8266 IDE和SharkSSL一起使用時(shí)自動(dòng)進(jìn)入安全模式(TLS)。在設(shè)備中使用支持TLS的Web服務(wù)器會(huì)增加額外的復(fù)雜性,最終用戶也將要承擔(dān)處理SSL證書的管理責(zé)任。在上面的視頻中,我們展示如何通過在瀏覽器中安裝認(rèn)證機(jī)構(gòu)(CA)證書來去除瀏覽器中顯示的證書錯(cuò)誤。CA證書用于在Web服務(wù)器示例中對(duì)證書進(jìn)行簽名。
嵌入式設(shè)備通常安裝在受保護(hù)的專用網(wǎng)絡(luò)中,但許多客戶仍要求使用TLS進(jìn)行Web服務(wù)器連接。在專用網(wǎng)絡(luò)上使用支持TLS的服務(wù)器會(huì)有問題,因?yàn)闆]有眾所周知的認(rèn)證授權(quán)機(jī)構(gòu)簽署IP地址或非標(biāo)準(zhǔn)(專用網(wǎng)絡(luò))名稱。一種選擇是成為自己的證書頒發(fā)機(jī)構(gòu)。如果有興趣了解更多相關(guān)信息,請(qǐng)點(diǎn)擊鏈接地址,查看教程:https://realtimelogic.com/blog/2014/05/How-to-act-as-a-Certificate-Authority-the-Easy-Way
如上所述,ESP8266速度很慢。TLS非常占用CPU,您會(huì)注意到需要一些時(shí)間才能建立連接。使用WebSockets進(jìn)行通信的單頁(yè)應(yīng)用示例針對(duì)CPU資源有限的設(shè)備進(jìn)行了優(yōu)化,但初始非對(duì)稱加密(TLS握手)仍然需要時(shí)間,特別對(duì)于一些不遵循友好設(shè)計(jì)實(shí)踐規(guī)則且打開許多TCP連接的瀏覽器,因?yàn)樾枰暾腡LS握手。
評(píng)論