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