Wie bekomme ich HTTPS auf Arduino?


31

Einfach ausgedrückt: Gibt es eine Möglichkeit, eine HTTPS-Verbindung auf dem Arduino herzustellen?

Ich habe es mir angesehen und festgestellt, dass es mit der Standardbibliothek und dem Ethernet-Shield nicht möglich ist, aber gibt es eine benutzerdefinierte Bibliothek, die das kann?

Was ist mit einem Coprozessor, also wie der WiFi-Shield? Wer weiß, ob der Arduino yún SSL hat?



Die erste Frage lautet "Wie können Sie eine Verbindung mit dem Arduino herstellen?". Wenn Sie beispielsweise SIM800 verwenden, ist HTTPS enthalten.
Peter

Antworten:


13

Auf Arduinos installierte MCUs können keine https-Verbindungen verarbeiten.

Auf der Linux-Seite verarbeitet Yún https mit Software wie curl, wget oder python. Ihre Skizze kann die Aufgabe nur an die Linux-Seite delegieren.

Obwohl curl einwandfrei funktioniert, müssen Sie python-openssl manuell installieren, da es aus Platzgründen nicht sofort verfügbar ist.


Wenn Sie sagen "Yún behandelt https auf der Linux-Seite", meinen Sie dann Arduino Yún oder das Yún-Schild?
Ciasto piekarz

Curl Wget oder Python hat nichts mit https zu tun
Peter

8

(Haftungsausschluss: Eigentlich bin ich der Autor des evothings.com-Artikels.)
Die Arduino UNO ist mehr als fähig, TLS durchzuführen . Ich habe gerade eine Blogpost-Serie zu diesem Thema fertiggestellt. Ich habe ein Arbeitsbeispiel einer Arduino UNO, die eine Kryptographie mit elliptischen Kurven durchführt (sect163r2), um einen AES-128-Schlüssel für die weitere Kommunikation auszutauschen.

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

Ich habe einen alternativen Ansatz gewählt, um eine echte HTTPS-Verbindung herzustellen. Stattdessen werden dieselben Protokolle unter der Haube verwendet, wobei jedoch ein unsicherer Kommunikationskanal verwendet wird. Ziemlich viel TLS auf HTTP.


6

Ich denke nicht, dass dies aufgrund der Größe und Komplexität der SSL-Bibliothek möglich ist, da das Arduino höchstwahrscheinlich unter Strom stehen würde. Davon abgesehen können Sie die Anforderungen an einen regulären Server richten und eine Art PHP-Skript verwenden, um die Anforderung an den HTTPS-Server weiterzuleiten. Ich bin mir nicht sicher, wie gut es funktionieren würde.

Sie können in der Suche zu interessieren diese .


6

Ich liste dies als Antwort auf, um es hier verlinken zu können. Es ist noch nicht voll https aber er arbeitet daran und es kann in Zukunft machbar sein http://evothings.com/is-it-possible-to-secure-micro-controllers-used-within-iot/

Hier ist ein Benchmark, bei dem er eine Nachricht mit einem öffentlichen 1024-Bit-Schlüssel verschlüsselt hat

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*

Dies ist so weit, wie er es getan hat, ist aber dabei, einen Testserver einzurichten, um zu sehen, wie nahe er einer vollständigen ssl / https-Implementierung kommen kann.


1
Könnten Sie bitte die interessantesten Details aus dem von Ihnen geposteten Link einfügen, damit die Leser sofort sehen können, ob es sich lohnt, weiterzulesen oder nicht? Andernfalls würde Ihre Antwort nicht den SE-Richtlinien entsprechen und müsste geschlossen werden.
jfpoilpret

2

Wie Federico Fissore bereits sagte, kann der Yún auf der Linux-Seite des Yún nur HTTPS (oder SSL, wie auch immer Sie es nennen möchten) verarbeiten.

Die erste Möglichkeit ist die Verwendung von Python mit Python OpenSSL. Dazu geben Sie die folgenden Befehle über SSH oder YunSerialTerminal ein:

opkg update
opkg install python-openssl

opkg updateStellt sicher, dass die Paketliste auf dem neuesten Stand ist, und opkg installinstalliert dann Python OpenSSL. Und dann können Sie mit Python mit dem Arduino sprechen. Diese Seite auf der Arduino-Website soll Ihnen bei der Verwendung von Python mit Arduino helfen.

Sie können auch verwenden , curlmit der -kOption in Ihrer Skizze. Beispielsweise:

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

Wenn Sie eine Datei herunterladen möchten, können Sie auch verwenden wget. Hierfür müssten Sie ein Upgrade durchführen, wgetindem Sie die folgenden Befehle erneut über SSH oder YunSerialTerminal eingeben:

opkg update
opkg upgrade wget

Und dann können Sie dies einfach in Ihrer Skizze tun:

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

ist es auch möglich, Arduino Yún Shield zu verwenden? anstelle von Arduino Yún!
Ciasto piekarz

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.