如何在Arduino上获取HTTPS?


31

简而言之:有没有办法在Arduino上获得HTTPS连接?

我一直在研究它,但是我发现使用标准库和以太网屏蔽是不可能的,但是有一个可以做到的自定义库吗?

协处理器(如WiFi屏蔽板)又如何呢?有人知道Arduinoyún是否有ssl吗?



第一个问题是“如何与Arduino连接?”。如果您使用(例如)SIM800,则它包含HTTPS。
— 彼得

Answers:


13

安装在Arduino上的MCU没有能力处理https连接。

Yún确实在Linux端使用curl,wget或python之类的软件处理https 。您的草图可以仅将任务委托给linux端。

虽然curl可以正常工作,但是尽管预先安装了python,但您仍需要手动安装python-openssl,因为它开箱即用(由于磁盘空间限制)


当您说“Yún可以在Linux端处理https”时,您是说ArduinoYún还是YúnShield?
— Ciasto piekarz

curl wget或python与https无关
— 彼得

8

(免责声明:我实际上是evothings.com文章的作者)
Arduino UNO具备执行TLS的能力。我刚刚完成了有关该主题的博客文章系列。我有一个Arduino UNO的工作示例,它正在执行椭圆曲线加密(sect163r2)交换AES-128密钥以继续通信。

http://ardiri.com/blog/utls_defining_lightweight_security_for_iot_part_1
...
http://ardiri.com/blog/utls_defining_lightweight_security_for_iot_part_8

我采用了另一种方法来尝试建立真正的HTTPS连接-相反,这是在后台使用相同的协议,但使用的是不安全的通信通道。HTTP上的几乎TLS。


6

由于SSL库的大小和复杂性,我认为这是不可能的,因为Arduino最有可能处于供电不足的状态。话虽这么说,您可以向常规服务器发出请求,并使用某种PHP脚本将请求代理到HTTPS服务器。不确定如何运作。

你可能有兴趣到看这个。


6

为了将其链接到此处,我将其作为答案列出。这是不完整的HTTPS还,但他正在它,它可能是可行的,将来 http://evothings.com/is-it-possible-to-secure-micro-controllers-used-within-iot/

这是他使用1024位公用密钥加密邮件的基准

Arduino UNO       16Mhz AVR               ==> 12596 ms*   8504 ms#
Arduino Leonardo  16Mhz AVR               ==> 12682 ms*   8563 ms#
Arduino Mega      16Mhz AVR               ==> 12596 ms*   8504 ms#
Arduino Due       84Mhz ARM               ==>  1032 ms*
Arduino Yún       16Mhz AVR + 400Mhz MIPS ==>   707 ms*
Intel Galileo     400Mhz x86              ==>   192 ms*

到目前为止,他已经完成了这项工作,但是正在设置测试服务器以尝试了解他可以完成的完整ssl / https实现程度。


1
您能否从您发布的链接中输入最有趣的细节,以便读者立即查看是否值得进一步阅读?否则,您的答案将不会遵循SE策略,因此必须将其关闭。
— jfpoilpret 2015年

2

正如Federico Fissore所说,Yún只能在Yún的Linux端处理HTTPS(或SSL,无论您想称呼它什么)。

第一种方法是将Python与Python OpenSSL结合使用。执行此操作的方法是通过SSH或YunSerialTerminal发出以下命令:

opkg update
opkg install python-openssl

opkg update将确保软件包列表是最新的,然后opkg install安装Python OpenSSL。然后您可以使用Python与Arduino对话。Arduino网站上的此页面应帮助您将Python与Arduino一起使用。

您也可以在草图中使用curl该-k选项。例如:

Process process;
process.runShellCommand("curl -k http://example.net");
while(p.running()); // this waits for the command to be done before continuing

另外,如果您要下载文件,则可以使用wget。这将要求您wget通过再次通过SSH或YunSerialTerminal发出以下命令来进行升级:

opkg update
opkg upgrade wget

然后,您可以在草图中执行以下操作:

Process process;
process.runShellCommand("wget http://example.net");
while(p.running()); // this waits for the command to be done before continuing

也可以使用ArduinoYúnShield吗?代替ArduinoYún!
— Ciasto piekarz

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.