Como obter o HTTPS no Arduino?


31

Em outras palavras: existe uma maneira de obter uma conexão HTTPS no Arduino?

Eu estive pesquisando e descobri que é impossível com a biblioteca padrão e o escudo Ethernet, mas existe uma biblioteca personalizada que pode fazer isso?

Que tal um coprocessador, ou seja, como o escudo WiFi possui? Alguém sabe se o Arduino yún tem ssl?



A primeira pergunta é "como você pode obter uma conexão com o Arduino?". Se você usa (por exemplo) o SIM800, ele inclui HTTPS.
Peter

Respostas:


13

Os MCUs montados no Arduinos não têm potência para lidar com conexões https.

Yún lida com https no lado do linux , com software como curl, wget ou python. Seu esboço pode apenas delegar a tarefa para o lado do linux.

Enquanto o curl funciona bem, apesar de ter o python pré-instalado, você precisa instalar manualmente o python-openssl, pois ele não está disponível imediatamente (devido a restrições de espaço em disco)


Quando você diz "Yún lida com https no lado do linux", você quer dizer Arduino Yún ou o escudo Yún?
Ciasto piekarz

enrolar wget ou python não tem nada a ver com https
Peter

8

(Isenção de responsabilidade: na verdade, sou o autor do artigo evothings.com)
A UNO do Arduino é mais do que capaz de executar TLS. Acabei de terminar uma série de post no blog sobre o assunto. Eu tenho um exemplo de trabalho de uma UNO do Arduino fazendo criptografia de curva elíptica (sect163r2) para trocar uma chave AES-128 por comunicação contínua.

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

Adotei uma abordagem alternativa para tentar fazer uma conexão HTTPS verdadeira - em vez disso, ele usa os mesmos protocolos sob o capô, mas usa um canal de comunicação inseguro para fazer isso. Praticamente TLS no HTTP.


6

Eu não acho que isso é possível devido ao tamanho e complexidade da Biblioteca SSL, porque o Arduino provavelmente estaria com pouca energia. Dito isto, você pode fazer as solicitações para um servidor comum e usar algum tipo de script PHP para fazer proxy da solicitação no servidor HTTPS. Não tenho certeza de como isso funcionaria.

Você pode estar interessado em analisar isso .


6

Eu listo isso como uma resposta para ter o link aqui. Ainda não está https completo, mas ele está trabalhando nisso e pode ser possível no futuro http://evothings.com/is-it-possible-to-secure-micro-controllers-used-within-iot/

aqui está uma referência que ele criptografou uma mensagem usando uma chave 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*

Isso é o máximo que ele fez, mas está no processo de configuração de um servidor de teste para ver como está perto de uma implementação completa de SSL / https que ele pode executar.


1
Você poderia colocar os detalhes mais interessantes no link que publicou para que os leitores possam ver imediatamente se vale a pena ler mais ou não? Caso contrário, sua resposta não seguiria as políticas da SE e teria que ser fechada.
Jfpoilpret

2

Como Federico Fissore disse acima, o Yún só pode manipular HTTPS (ou SSL, como você quiser chamá-lo) no lado Linux do Yún.

A primeira maneira de fazer isso é usar o Python com o Python OpenSSL. A maneira como você faz isso é emitindo os seguintes comandos via SSH ou YunSerialTerminal:

opkg update
opkg install python-openssl

opkg updateirá garantir que a lista de pacotes esteja atualizada e opkg installinstala o Python OpenSSL. E então você pode conversar com o Arduino usando Python. Esta página no site do Arduino deve ajudá-lo a usar o Python com o Arduino.

Você também pode usar curlcom a -kopção em seu esboço. Por exemplo:

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

Além disso, se você quiser baixar um arquivo, poderá usar wget. Isso exigiria a atualização wgetemitindo esses comandos novamente via SSH ou YunSerialTerminal:

opkg update
opkg upgrade wget

E então você pode fazer isso no seu esboço:

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

também é possível usar o Arduino Yún Shield? em vez de Arduino Yún!
Ciasto piekarz

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.