Come ottenere HTTPS su Arduino?


31

In parole povere: c'è un modo per ottenere una connessione HTTPS su Arduino?

Ci ho guardato dentro e ho scoperto che è impossibile con la libreria standard e lo schermo Ethernet, ma esiste una libreria personalizzata che può farlo?

Che dire di un coprocessore, cioè come lo scudo WiFi ha? Qualcuno sa se l'Arduino yún ha SSL?



La prima domanda è "come si può ottenere una connessione con Arduino?". Se si utilizza (ad es.) SIM800, è incluso HTTPS.
Peter,

Risposte:


13

Gli MCU montati su Arduinos non hanno la potenza di cavallo per gestire le connessioni https.

Yún gestisce https sul lato Linux , con software come curl, wget o python. Il tuo schizzo può semplicemente delegare l'attività al lato Linux.

Mentre curl funziona bene, nonostante abbia preinstallato Python, è necessario installare manualmente python-openssl, poiché non è disponibile immediatamente (a causa di vincoli di spazio su disco)


Quando dici "Yún gestisce https sul lato Linux" intendi Arduino Yún o Yún Shield?
Ciasto piekarz,

curl wget o python non ha nulla a che fare con https
Peter,

8

(Dichiarazione di non responsabilità: in realtà sono l'autore dell'articolo evothings.com)
Arduino UNO è più che capace di fare TLS. Ho appena finito una serie di post sul blog sull'argomento. Ho un esempio funzionante di un Arduino UNO che esegue la crittografia con curva ellittica (sect163r2) per scambiare una chiave AES-128 per una comunicazione continua.

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

Ho adottato un approccio alternativo per provare a stabilire una vera connessione HTTPS - invece, questo utilizza gli stessi protocolli sotto il cofano ma utilizza un canale di comunicazione non sicuro per farlo. Praticamente TLS su HTTP.


6

Non penso che sia possibile a causa delle dimensioni e della complessità della libreria SSL, perché Arduino molto probabilmente sarebbe alimentato. Detto questo, è possibile inoltrare le richieste a un server normale e utilizzare una sorta di script PHP per inoltrare la richiesta al server HTTPS. Non sono sicuro di come funzionerebbe comunque.

Potresti essere interessato a guardare questo .


6

Lo elenco come una risposta per il bene di averlo collegato qui. Non è ancora completo https ma ci sta lavorando e potrebbe essere fattibile in futuro http://evothings.com/is-it-possible-to-secure-micro-controllers-used-within-iot/

ecco un benchmark che ha crittografato un messaggio usando una chiave pubblica a 1024 bit

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*

Questo è quanto è andato con esso, ma è in procinto di configurare un server di prova per lavorare per vedere quanto vicino a un'implementazione completa ssl / https che può realizzare.


1
Potresti per favore inserire i dettagli più interessanti dal link che hai pubblicato in modo che i lettori possano vedere subito se vale la pena leggere ulteriormente o no? Altrimenti la tua risposta non seguirebbe le politiche SE e dovrebbe essere chiusa.
jfpoilpret,

2

Come dice Federico Fissore sopra, lo Yún può gestire solo HTTPS (o SSL, come lo si desidera chiamare) sul lato Linux dello Yún.

Il primo modo per farlo è usare Python con Python OpenSSL. Il modo in cui lo fai è emettendo i seguenti comandi tramite SSH o YunSerialTerminal:

opkg update
opkg install python-openssl

opkg updateassicurerà che l'elenco dei pacchetti sia aggiornato, quindi opkg installinstalla Python OpenSSL. E poi puoi parlare con Arduino usando Python. Questa pagina sul sito Web di Arduino dovrebbe aiutarti a utilizzare Python con Arduino.

Puoi anche usare curlcon l' -kopzione nel tuo schizzo. Per esempio:

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

Inoltre, se si desidera scaricare un file, è possibile utilizzare wget. Ciò richiederebbe l'aggiornamento wgeteseguendo nuovamente questi comandi tramite SSH o YunSerialTerminal:

opkg update
opkg upgrade wget

E poi puoi farlo nel tuo schizzo:

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

è anche possibile utilizzare Arduino Yún Shield? invece di Arduino Yún!
Ciasto piekarz,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.