Comment obtenir HTTPS sur Arduino?


31

En clair: existe-t-il un moyen d'obtenir une connexion HTTPS sur l'Arduino?

Je l'ai regardé et j'ai trouvé que c'était impossible avec la bibliothèque standard et le bouclier Ethernet, mais y a-t-il une bibliothèque personnalisée qui peut le faire?

Qu'en est-il d'un coprocesseur, c'est-à-dire comme le bouclier WiFi? Quelqu'un sait si l'Arduino yún a SSL?



La première question est "comment obtenir une connexion avec l'Arduino?". Si vous utilisez (par exemple) SIM800, il a HTTPS inclus.
Peter

Réponses:


13

Les MCU montés sur Arduinos n'ont pas la puissance nécessaire pour gérer les connexions https.

Yún gère https du côté linux , avec des logiciels comme curl, wget ou python. Votre croquis peut simplement déléguer la tâche au côté Linux.

Bien que curl fonctionne correctement, bien que python soit préinstallé, vous devez installer manuellement python-openssl, car il n'est pas disponible immédiatement (en raison de contraintes d'espace disque)


Quand vous dites "Yún gère https du côté linux", voulez-vous dire Arduino Yún ou le Bouclier Yún?
Ciasto piekarz

curl wget ou python n'a rien à voir avec https
Peter

8

(Avertissement: je suis en fait l'auteur de l'article evothings.com)
L'Arduino UNO est plus que capable de faire TLS. Je viens de terminer une série d'articles de blog sur le sujet. J'ai un exemple de travail d'un Arduino UNO faisant de la cryptographie à courbe elliptique (sect163r2) pour échanger une clé AES-128 pour une communication continue.

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

J'ai adopté une approche alternative pour essayer d'établir une véritable connexion HTTPS - à la place, cela utilise les mêmes protocoles sous le capot mais en utilisant un canal de communication non sécurisé pour le faire. À peu près TLS sur HTTP.


6

Je ne pense pas que ce soit possible en raison de la taille et de la complexité de la bibliothèque SSL, car l'Arduino serait très probablement sous-alimenté. Cela étant dit, vous pouvez faire les demandes à un serveur normal et utiliser une sorte de script PHP pour proxy la demande au serveur HTTPS. Je ne sais pas si cela fonctionnerait bien.

Vous pouvez être intéressé à regarder ce .


6

Je liste cela comme une réponse dans le but de l'avoir lié ici. Ce n'est pas encore https complet mais il y travaille et cela pourrait être faisable à l'avenir http://evothings.com/is-it-possible-to-secure-micro-controllers-used-within-iot/

voici une référence qu'il a chiffrée un message à l'aide d'une clé publique 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*

C'est aussi loin qu'il soit allé avec, mais il est en train de mettre en place un serveur de test pour voir à quelle distance d'une implémentation ssl / https complète il peut réussir.


1
Pourriez-vous s'il vous plaît mettre les détails les plus intéressants à partir du lien que vous avez publié afin que les lecteurs puissent voir immédiatement si cela vaut la peine d'être lu plus loin ou non? Sinon, votre réponse ne respecterait pas les politiques SE et devrait être fermée.
jfpoilpret du

2

Comme Federico Fissore l'a dit ci-dessus, le Yún ne peut gérer que le HTTPS (ou SSL, peu importe comment vous l'appelez) du côté Linux du Yún.

La première façon de le faire est d'utiliser Python avec Python OpenSSL. Pour ce faire, exécutez les commandes suivantes via SSH ou YunSerialTerminal:

opkg update
opkg install python-openssl

opkg updates'assurera que la liste des packages est à jour, puis opkg installinstalle Python OpenSSL. Et puis vous pouvez parler à l'Arduino en utilisant Python. Cette page sur le site Arduino devrait vous aider à utiliser Python avec Arduino.

Vous pouvez également utiliser curll' -koption avec votre croquis. Par exemple:

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

De plus, si vous souhaitez télécharger un fichier, vous pouvez utiliser wget. Cela vous obligerait à mettre à niveau wgeten émettant à nouveau ces commandes via SSH ou YunSerialTerminal:

opkg update
opkg upgrade wget

Et puis vous pouvez simplement le faire dans votre croquis:

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

est-il également possible d'utiliser Arduino Yún Shield? au lieu d'Arduino Yún!
Ciasto piekarz

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.