概述在3美元的WiFi设备上安装安全的嵌入式Web服务器的方法

RF/无线

1823人已加入

描述

嵌入式开发可能既困难又昂贵,但本文展示如何在30分钟内,在一种成本超低的设备上安装好安全的嵌入式Web服务器,以便在WiFi芯片上运行FreeRTOS和lwIP TCP/IP堆栈。

为什么要使用安全(TLS)的服务器?

浏览器已经开始将标准(HTTP)服务器在浏览器栏中标记为“不受信任”(参见下面的图2),而安全服务器对最终用户来说将更加值得信赖。我将在本文下面的安全注意事项部分详细介绍。

WiFi芯片ESP8266和Minnow服务器

1美元即可买到ESP8266芯片,但我建议使用带USB接口的线路板。更新固件需要USB接口。如果没有板载USB,则需要额外的步骤,比如使用USB-TTL转换器。一个现成的带USB接口的ESP8266线路板只需3美元可以购买到。

低成本的ESP8266 WiFi芯片非常适合学习之用,但速度很慢,特别是在执行诸如加密等CPU密集型任务时。在使用慢速芯片来处理CPU密集型任务时,确实需要慎重考虑你的设计。

ESP8266以80 Mhz的频率运行,这对嵌入式芯片来说还算可以,但代码执行速度比较慢,因为代码要通过SPI内存执行。在超过资源受限微控制器的实际限制时,在此设备上运行启用TLS的服务器可提供真正的唤醒呼叫,并提供对可在慢速微控制器上运行的内容的精彩介绍。选择合适的安全Web服务器类型和Web应用程序设计对于速度较慢的设备至关重要。

在本文中,我将解释如何在ESP8266上编译和运行Minnow服务器。Minitow服务器和参考示例在GitHub上可以找到。

我最近在embedded.com上发表了一篇关于Minnow服务器的文章。该篇文章介绍了如何使用Minnow服务器创建一个基于Web的现代设备管理应用程序。本文还探讨了在使用TLS时将WebSocket服务器与所谓的单页应用程序(SPA)结合使用的好处。我建议读者先阅读一下这篇文章,因为我们将为ESP8266准备和编译相同的示例代码。

入门

我们将使用由esp-open-rtos项目提供的ESP8266 FreeRTOS/lwIP环境,但不用担心,你不需要经历一遍复杂的esp-open-rtos设置过程。相反,我们将利用预先配置好且完全准备好使用的环境,这个环境就是一个易于使用的基于Web的IDE.

下载FreeRTOS/lwIP ESP8266 IDE

导航到Real Time Logic并下载我们已经准备好的ESP8266 IDE。这一IDE专为教育目的而设计,包括一个预先配置好的esp-open-rtos,并绑定好了可简单使用的基于Web的C语言源代码IDE。IDE需要VmWare或VirtualBox,我本人更喜欢VmWare胜过VirtualBox,因为我发现前者更容易使用。而且,请注意,VmWare对于非商业用途是免费的。

ESP8266 IDE还包括一个嵌入式TLS堆栈(SharkSSL),Minnow服务器在使用SharkSSL编译时会自动使用TLS。

您可以在没有ESP8266线路板的情况下开始使用ESP8266 IDE,但无法上载和运行已编译过的代码。换句话说,您可以下载IDE并按照本教程中的所有步骤完成操作,除了在ESP8266上运行代码。

图1中的屏幕截图显示了虚拟机及与其相连的基于Web的IDE。请注意虚拟机是如何获得ESP8266 USB连接的所有权。基于Web的IDE检测到此情况,便显示ESP8266已连接,并准备使用新固件进行更新。

图1:基于Web的IDE连接到虚拟机的IP地址。

图1中的屏幕截图显示ESP8266通过一块面包板连接到LED。除非您想要控制本示例应用程序中使用的外部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,也不要担心。您只需复制并粘贴我们准备好的命令即可。下图显示了粘贴到Linux Web shell中的Minnow Server安装命令的屏幕截图,可从http://vm-ip-address/webshell/获得。

图2:粘贴到Linux Web shell中的Minnow Server安装命令。

当您在浏览器中输入Web shell的URL时,系统将提示您登录。用户名为sharkssl,密码为SharkSSL。

GitHub上的ESP8266教程解释了如何配置虚拟机、安装所有内容、编译Web服务器示例,以及刷新固件等。以下视频通过逐步解释简化了操作过程。

安全与非安全

Minnow Server可以在安全或非安全模式下使用,而在与ESP8266 IDE和SharkSSL一起使用时自动进入安全模式(TLS)。在设备中使用支持TLS的Web服务器会增加额外的复杂性,最终用户也将要承担处理SSL证书的管理责任。在上面的视频中,我们展示如何通过在浏览器中安装认证机构(CA)证书来去除浏览器中显示的证书错误。CA证书用于在Web服务器示例中对证书进行签名。

嵌入式设备通常安装在受保护的专用网络中,但许多客户仍要求使用TLS进行Web服务器连接。在专用网络上使用支持TLS的服务器会有问题,因为没有众所周知的认证授权机构签署IP地址或非标准(专用网络)名称。一种选择是成为自己的证书颁发机构。如果有兴趣了解更多相关信息,请点击链接地址,查看教程:https://realtimelogic.com/blog/2014/05/How-to-act-as-a-Certificate-Authority-the-Easy-Way

如上所述,ESP8266速度很慢。TLS非常占用CPU,您会注意到需要一些时间才能建立连接。使用WebSockets进行通信的单页应用示例针对CPU资源有限的设备进行了优化,但初始非对称加密(TLS握手)仍然需要时间,特别对于一些不遵循友好设计实践规则且打开许多TCP连接的浏览器,因为需要完整的TLS握手。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分