Як отримати HTTPS на Arduino?


31

Простіше кажучи: чи є спосіб встановити HTTPS-з'єднання на Arduino?

Я шукав це, і виявив, що це неможливо зі стандартною бібліотекою та екраном Ethernet, але чи є власна бібліотека, яка може це зробити?

А як щодо копроцесора, тобто як має захист WiFi? Хтось знає, чи має Arduino yún ssl?


1
Ви могли б бути зацікавлені в цьому: stackoverflow.com/questions/15830333/arduino-due-https-support
puredevotion

Перше питання - «як можна налагодити зв’язок з Arduino?». Якщо ви використовуєте (наприклад) SIM800, у нього включено HTTPS.
Петро

Відповіді:


13

MCU, встановлені на Arduinos, не мають потужності коня для обробки https-з'єднань.

Yún обробляє https на стороні linux з таким програмним забезпеченням, як curl, wget або python. Ваш ескіз може просто делегувати завдання стороні Linux.

Хоча curl працює добре, незважаючи на те, що попередньо встановлено python, вам потрібно встановити python-openssl вручну, оскільки він недоступний у вікні (через обмеження місця на диску)


Коли ви говорите "Юнь справляється з https на стороні Linux", ти маєш на увазі Ардуїно Юна або щит Юна?
Ciasto piekarz

curl wget або python не мають нічого спільного з https
Пітер

8

(Відмова: я насправді автор статті evothings.com) Ардуїно
ООН більше ніж здатна займатися TLS. Я щойно закінчив серію публікацій в блозі на цю тему. У мене є робочий приклад ардуїнського ООН, який робить криптографію кривої еліптичної кривої (sect163r2) для обміну ключем AES-128 для продовження зв'язку.

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

Я застосував альтернативний підхід до спроби встановити справжнє HTTPS-з'єднання - замість цього для цього використовуються ті самі протоколи під кришкою, але використовуючи небезпечний канал зв'язку для цього. Досить багато TLS на HTTP.


6

Я не думаю, що це можливо через розмір і складність бібліотеки SSL, тому що Arduino, швидше за все, не буде працювати. Це означає, що ви можете робити запити на звичайний сервер і використовувати якийсь PHP-скрипт для проксі-сервера на HTTPS-сервері. Не впевнений, наскільки добре це буде працювати.

Можливо, вам буде цікаво подивитися на це .


6

Я перелічу це як відповідь заради того, щоб це було пов’язано тут. Ще не повний https, але він працює над цим, і це можливо зробити в майбутньому http://evothings.com/is-it-possible-to-secure-micro-controllers-used-within-iot/

Ось еталон, він шифрував повідомлення за допомогою 1024-бітного відкритого ключа

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*

Це настільки, наскільки він пішов з цим, але в процесі налаштування тестового сервера для роботи над тим, наскільки близько до повної реалізації ssl / https він може зняти.


1
Чи можете ви, будь ласка, вказати найцікавіші деталі із посилання, яке ви опублікували, щоб читачі могли побачити відразу, чи варто читати далі чи ні? Інакше ваша відповідь не буде відповідати політиці SE, і її доведеться закрити.
jfpoilpret

2

Як сказано вище Федеріко Фіссоре, Yún може обробляти тільки HTTPS (або SSL, як би ви хочете його назвати) на Linux стороні Юна.

Перший спосіб зробити це - використання Python з Python OpenSSL. Так ви робите це, видаючи наступні команди через SSH або YunSerialTerminal:

opkg update
opkg install python-openssl

opkg updateпереконається, що список пакетів оновлений, а потім opkg installвстановить Python OpenSSL. І тоді ви можете поговорити з Arduino за допомогою Python. Ця сторінка на веб-сайті Arduino повинна допомогти вам у використанні Python з Arduino.

Крім того, можна використовувати curlз -kопцією у вашому ескізі. Наприклад:

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

Крім того, якщо ви хочете завантажити файл, ви можете використовувати wget. Це вимагатиме від вас оновлення wget, повторно видавши ці команди через SSH або YunSerialTerminal:

opkg update
opkg upgrade wget

І тоді ви можете просто зробити це у своєму ескізі:

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

чи можливо також за допомогою Arduino Yún Shield? замість Ардуїно Юна!
Ciasto piekarz

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.