¿Cómo obtener HTTPS en Arduino?


31

En pocas palabras: ¿hay alguna manera de obtener una conexión HTTPS en el Arduino?

Lo he estado investigando y he descubierto que es imposible con la biblioteca estándar y el escudo de Ethernet, pero ¿hay una biblioteca personalizada que pueda hacerlo?

¿Qué pasa con un coprocesador, es decir, como el escudo WiFi tiene? Alguien sabe si el Arduino yún tiene ssl?



La primera pregunta es "¿cómo puedes obtener una conexión con el Arduino?". Si usa (p. Ej.) SIM800, tiene HTTPS incluido.
Peter

Respuestas:


13

Las MCU montadas en Arduinos no tienen la potencia para manejar conexiones https.

Yún maneja https en el lado de Linux , con software como curl, wget o python. Su boceto puede simplemente delegar la tarea al lado de Linux.

Si bien curl funciona bien, a pesar de tener python preinstalado, debe instalar manualmente python-openssl, ya que no está disponible de fábrica (debido a restricciones de espacio en disco)


Cuando dices "Yún maneja https en el lado de Linux", ¿te refieres a Arduino Yún o al Escudo de Yún?
Ciasto piekarz

curl wget o python no tiene nada que ver con https
Peter

8

(Descargo de responsabilidad: en realidad soy el autor del artículo evothings.com)
El Arduino UNO es más que capaz de hacer TLS. Acabo de terminar una serie de publicaciones de blog sobre el tema. Tengo un ejemplo de trabajo de un Arduino UNO haciendo criptografía de curva elíptica (sect163r2) para intercambiar una clave AES-128 para una comunicación 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

Tomé un enfoque alternativo para tratar de hacer una verdadera conexión HTTPS; en cambio, esto está usando los mismos protocolos bajo el capó pero usando un canal de comunicación inseguro para hacerlo. Bastante TLS en HTTP.


6

No creo que sea posible debido al tamaño y la complejidad de la Biblioteca SSL, porque lo más probable es que el Arduino tenga poca potencia. Dicho esto, puede realizar las solicitudes a un servidor normal y utilizar algún tipo de script PHP para enviar la solicitud al servidor HTTPS. Sin embargo, no estoy seguro de qué tan bien funcionaría.

Puede interesarle ver esto .


6

Enumero esto como una respuesta en aras de vincularlo aquí. Todavía no está completo https, pero está trabajando en ello y puede ser factible en el futuro http://evothings.com/is-it-possible-to-secure-micro-controllers-used-within-iot/

Aquí hay un punto de referencia que hizo encriptando un mensaje usando una clave pública de 1024 bits

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*

Esto es lo más lejos que ha llegado con él, pero está en el proceso de configurar un servidor de prueba para trabajar y ver cuán cerca de una implementación completa de SSL / https puede lograr.


1
¿Podría por favor poner los detalles más interesantes del enlace que publicó para que los lectores puedan ver de inmediato si vale la pena leer más o no? De lo contrario, su respuesta no seguiría las políticas de SE y tendría que cerrarse.
jfpoilpret

2

Como dice Federico Fissore anteriormente, el Yún solo puede manejar HTTPS (o SSL, como quiera llamarlo) en el lado de Linux del Yún.

La primera forma de hacerlo es usar Python con Python OpenSSL. La forma de hacerlo es emitiendo los siguientes comandos a través de SSH o YunSerialTerminal:

opkg update
opkg install python-openssl

opkg updatese asegurará de que la lista de paquetes esté actualizada y luego opkg installinstalará Python OpenSSL. Y luego puedes hablar con el Arduino usando Python. Esta página en el sitio web de Arduino debería ayudarlo a usar Python con Arduino.

También puede usar curlcon la -kopción en su boceto. Por ejemplo:

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

Además, si desea descargar un archivo, puede usarlo wget. Esto requeriría que actualice wgetnuevamente emitiendo estos comandos a través de SSH o YunSerialTerminal:

opkg update
opkg upgrade wget

Y luego puedes hacer esto en tu boceto:

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

¿También es posible usar Arduino Yún Shield? en lugar de Arduino Yún!
Ciasto piekarz

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.