如何在3美元的WiFi设备上安装安全的嵌入式Web服务器

作者: 4000213000 分类: 豆友棋牌官网 发布时间: 2019-05-06 21:35

嵌入式开发可能既困难又高贵,但本文展现如何在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地址。 (来源:Real Time Logic)

图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/获得。

图1:基于Web的IDE连接到虚拟机的IP地址。 (来源:Real Time Logic)

当您在阅读器中输入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握手。要理解有关现代Web阅读器和慢速微控造器问题的更多信息,请参阅我们的教程:https://realtimelogic.com/blog/2018/11/Creating-SinglePage-Apps-with-the-Minnow-Server,该教程详细讨论了这一问题。

开发者形式与发布形式

在上面的视频中,我们通过在固件中嵌入单页应用(HTML资源)来编译发布形式。这样,我们能够简单地导航到设备以启动应用,将应用按需加载到阅读器中。

开发Web应用凡是需要屡次迭代,而且必需为每次迭代刷新新的固件,这就使得开发过程十分耗时。幸运的是,单页应用能够在开发期间驻留在您的PC上,您只需刷新阅读器即可加载新的应用法式。从PC加载应用法式后,此中的JavaScript代码将与ESP8266成立独一的WebSocket连接。此连接用于所有阅读器与设备的交互。教程【使用Minnow Server创建单页应用法式】:https://realtimelogic.com/blog/2018/11/Creating-SinglePage-Apps-with-the-Minnow-Server,也详细讨论了这一开发过程。

请留意,单页应用的效劳器端(设备端)为ESP8266提供了一个端口API。此API与拖放固件上载示例一起使用,但不保留上载的数据。此外,更改凭据也没生效。 esp-open-rtos API包罗一个文件系统,您能够使用esp-open-rtos提供的API添加缺失的功能。

IoT启用ESP8266的参考示例

配置有嵌入式Web效劳器的设备凡是会在公司防火墙和/或路由器后面的公用网络上安拆和操做,而且在外部使用时和防火墙滥用时主动遭到庇护。但是,此类布置也会阻遏合法的长途使用。

有时,嵌入式设备需要通过Internet从长途位置停止操做,最宁静的办法是操纵物联网启用设备并让设备连接到Internet上的效劳器。下图描绘了这样的设置。

图3:当地或通过Internet长途访问嵌入式设备。(来源:Real Time Logic)

External User:外部用户

Online connection:在线连接

Redirector:重定向器

Private Network:专有网络

Local Intranet user:当地企业内部用户

Direct websocket: 间接Websocket

Connection:连接

Minnow Server参考示例包罗一个可在编译时启用的可选IoT组件。请留意,此组件在默认情况下是禁用的,而且需要对代码(或Makefile)停止一些细微的修改才能启用它。上面视频的第二部门显示了如何连接到我们设置的在线测试效劳器。

当设备以IoT形式运行时,除了充任当地使用的效劳器之外,该设备还做为网络客户端运行。网络客户端凡是不需要任何网络配置来连接到Internet上的效劳,但必需连接到已知的效劳。出于这个原因,我们成立了一个可用于测试目的的在线IoT效劳器。您能够使用它停止测试。

在线效劳器充任长途用户和设备之间的代办署理,并允许长途用户宁静地访问在防火墙后运行的私有Web效劳器。请留意,我们设置的测试效劳器不是即用型效劳。我们将连结运行一段时间,但假如您方案使用IoT形式,最末您将需要设置本人的私有IoT效劳器。

GitHub上的Minnow页面包罗有关如何设置本人的私有IoT效劳器的说明。私有IoT效劳器的好处是没必要依赖于任何特定的IoT效劳提供商。您会惊讶地发现操做私有IoT效劳器是多么容易和合理。

如何启用IoT形式

上面的视频显示了如何IoT启用Minnow Server的参考示例,以下屏幕截图显示了需要在Makefile中启用的宏。

图4:宏'USE_SMQ'启用IoT形式,宏''SMQ_DOMAIN'设置效劳器名称。 (来源:R

从图4中能够看出,SMQ_DOMAIN宏必需设置为我们的在线IoT演示效劳器“minnow.ml”,或您本人的IoT效劳器。

此时,您应该能够单击“Run”按钮,以编译并上载新的固件。运行新固件时,您应该会在Web控造台中看到以下文本。请留意,我删除了一些打印输出成果。

WebSocket效劳器监听443

SMQ:连接到https://minnow.ml

协商密码:TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256

警告:从minnow.ml收到的证书不受信任!

证书警告的原因与充任不信任在线效劳器的TLS客户端的设备有关。证书办理很复杂,我会在本文最初讨论这个问题。

所有连接的设备都显示在在线效劳器的(minnow.ml)用户界面中。单击此中一个设备将转到该设备的登录屏幕。登录页面的验证凭据由设备提供,而不是在线效劳器。默认凭据是root/password。图5显示了单击设备链接之前和之后的在线效劳器。

图5:单击设备链接之前和之后的在线效劳器。 (来源:Real Time Logic)

图5的左侧窗格显示了一个已连接的设备,但是在线效劳器能够办理任意数量的设备,而且随着连接设备的增加,列表也会增长。单击链接时,联机效劳器的代办署理功能会将您连接到设备,从这一点开端,在概念上,连接的工做方式与图3中所示的间接WebSocket连接类似。

宁静考虑事项

如上所述,Minnow Server能够在宁静(HTTPS)或非宁静(HTTP)形式下运行。因没必要处置证书,使用非宁静连接比力容易。在慢速CPU上效劳器运行也要快得多。但是,如上图2中的阅读器栏所示,在非宁静连接时,Google的Chrome阅读器和其他阅读器如今会显示警告动静。谁知道接下来他们会做什么?谷歌似乎决心想要封闭非宁静通信。

使用TLS时,您必需确保使用有效的信任链。假如用户阅读到具有不受信任证书的效劳器,所有阅读器城市发出严峻警告信息。正如我们在上面的视频中所解释的那样,为私有效劳器成立信任链需要您在公用网络上提供信任办理处理计划。如上视频所示,一种处理计划是充任您本人的证书颁布机构。假如您有兴趣成立本人的信任链,我建议您阅读文章:《如何充任本人的证书颁布机构?》

https://realtimelogic.com/blog/2014/05/How-to-act-as-a-Certificate-Authority-the-Easy-Way

当设备在客户端形式下运行,并连接到在线测试效劳器minnow.ml时,控造台上将打印出证书警告。您能够在示例源代码文件“main.c”中找到此打印输出成果(参见图3)。不要打印警告,而是应该末止连接,但在修改C代码以末止不受信任连接之前,必需确保设备信任在线效劳器minnow.ml。通过将在线效劳器的CA证书(根证书)导入设备的C代码,就能够恢复信任。在线效劳器的证书由Let's Encrypt签署。

假如您不熟悉“信任链”这一概念,我建议您阅读文章《嵌入式系统的证书办理》:

https://realtimelogic.com/blog/2013/10/Certificate-Management-for-Embedded-Systems

,

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注