Jak zdobyć HTTPS na Arduino?


31

Mówiąc wprost: czy istnieje sposób na uzyskanie połączenia HTTPS na Arduino?

Zaglądałem w to i odkryłem, że jest to niemożliwe w przypadku standardowej biblioteki i osłony Ethernet, ale czy istnieje biblioteka niestandardowa, która może to zrobić?

Co z koprocesorem, tzn. Tak jak tarcza WiFi? Czy ktoś wie, czy Arduino yún ma ssl?



Pierwsze pytanie brzmi: „Jak uzyskać połączenie z Arduino?”. Jeśli używasz (np.) SIM800, zawiera HTTPS.
Peter

Odpowiedzi:


13

Jednostki MCU zamontowane na Arduinos nie mają wystarczającej mocy do obsługi połączeń https.

Yún obsługuje https po stronie Linux , z oprogramowaniem takim jak curl, wget lub python. Twój szkic może po prostu delegować zadanie na stronę linux.

Chociaż curl działa dobrze, pomimo preinstalowanego Pythona, musisz ręcznie zainstalować Python-openssl, ponieważ nie jest on dostępny od razu po wyjęciu z pudełka (z powodu ograniczeń miejsca na dysku)


Kiedy mówisz „Yún obsługuje https po stronie linuxa”, masz na myśli Arduino Yúna czy Yún Shield?
Ciasto piekarz 31.01.17

curl wget lub python nie ma nic wspólnego z https
Peter

8

(Oświadczenie: W rzeczywistości jestem autorem artykułu evothings.com)
Arduino UNO jest więcej niż w stanie zrobić TLS. Właśnie skończyłem serię postów na blogu na ten temat. Mam działający przykład Arduino UNO wykonującego kryptografię krzywej eliptycznej (sekt163r2) w celu wymiany klucza AES-128 w celu kontynuowania komunikacji.

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

Podjąłem alternatywne podejście do próby nawiązania prawdziwego połączenia HTTPS - zamiast tego używa tych samych protokołów pod maską, ale używa do tego niezabezpieczonego kanału komunikacji. Prawie TLS na HTTP.


6

Nie sądzę, aby było to możliwe ze względu na rozmiar i złożoność biblioteki SSL, ponieważ Arduino najprawdopodobniej byłby niedostatecznie zasilany. Biorąc to pod uwagę, możesz przesyłać żądania do zwykłego serwera i użyć jakiegoś skryptu PHP do przesłania żądania do serwera HTTPS. Nie jestem jednak pewien, jak dobrze by to działało.

Być może zainteresuje Cię to .


6

Podaję to jako odpowiedź na link tutaj. Nie jest jeszcze pełny https, ale on nad tym pracuje i może być wykonalny w przyszłości http://evothings.com/is-it-possible-to-secure-micro-controllers-used-within-iot/

Oto test, w którym zaszyfrował wiadomość przy użyciu 1024-bitowego klucza publicznego

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*

Jest to tak dalece, jak to możliwe, ale jest w trakcie konfigurowania serwera testowego, aby pracował nad sprawdzeniem, jak blisko pełnej implementacji ssl / https może się wycofać.


1
Czy możesz podać najciekawsze szczegóły z zamieszczonego linku, aby czytelnicy mogli od razu zobaczyć, czy warto przeczytać dalej, czy nie? W przeciwnym razie Twoja odpowiedź nie byłaby zgodna z polityką SE i musiałaby zostać zamknięta.
jfpoilpret

2

Jak powiedział Federico Fissore powyżej, Yún może obsługiwać HTTPS (lub SSL, jakkolwiek chcesz to nazwać) po stronie Linux Yúna.

Pierwszym sposobem na to jest użycie Pythona z Python OpenSSL. Można to zrobić, wydając następujące polecenia za pośrednictwem SSH lub YunSerialTerminal:

opkg update
opkg install python-openssl

opkg updateupewni się, że lista pakietów jest aktualna, a następnie opkg installzainstaluje Python OpenSSL. A potem możesz porozmawiać z Arduino za pomocą Pythona. Ta strona na stronie Arduino powinna pomóc ci w używaniu Pythona z Arduino.

Możesz również użyć curltej -kopcji w swoim szkicu. Na przykład:

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

Ponadto, jeśli chcesz pobrać plik, możesz użyć wget. Wymagałoby to aktualizacji wgetpoprzez ponowne wydanie tych poleceń za pośrednictwem SSH lub YunSerialTerminal:

opkg update
opkg upgrade wget

Następnie możesz to zrobić w swoim szkicu:

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

czy jest to również możliwe przy użyciu Arduino Yún Shield? zamiast Arduino Yún!
Ciasto piekarz

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.