如何在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.