Как получить HTTPS на Arduino?

Проще говоря: есть ли способ установить HTTPS-соединение на Arduino?

Я изучал это и обнаружил, что это невозможно со стандартной библиотекой и экраном Ethernet, но существует ли специальная библиотека, которая может это сделать?

А как насчет сопроцессора, например, такого, как у WiFi-шилда? Кто-нибудь знает, есть ли у Arduino yun SSL?

, 👍35

Обсуждение

вас это может заинтересовать: http://stackoverflow.com/questions/15830333/arduino-due-https-support, @puredevotion

Первый вопрос: «Как можно получить соединение с Arduino?». Если вы используете (например) SIM800, в него включен HTTPS., @Peter


6 ответов


Лучший ответ:

14

Микроконтроллеры, установленные на Arduino, не обладают достаточной мощностью для обработки https-соединений.

Юн поддерживает https на стороне Linux с помощью такого программного обеспечения, как Curl, wget или Python. Ваш скетч может просто делегировать задачу стороне Linux.

Хотя Curl работает нормально, несмотря на предустановленный Python, вам необходимо вручную установить Python-openssl, поскольку он недоступен «из коробки» (из-за ограничений дискового пространства)

,

Когда вы говорите «Yún обрабатывает https на стороне Linux», вы имеете в виду Arduino Yun или Yun Shield?, @Ciasto piekarz

Curl wget или Python не имеют ничего общего с https, @Peter


6

Я не думаю, что это возможно из-за размера и сложности библиотеки SSL, потому что Arduino, скорее всего, будет недостаточно питаться. При этом вы можете отправлять запросы на обычный сервер и использовать какой-то PHP-скрипт для проксирования запроса на HTTPS-сервер. Хотя не уверен, насколько хорошо это сработает.

Возможно, вам будет интересно посмотреть это.

,

1

Как сказал выше Федерико Фиссоре, Yun может обрабатывать только HTTPS (или SSL, как бы вы его ни называли) на стороне Linux Yun.

Первый способ сделать это — использовать 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()); // это ожидает выполнения команды, прежде чем продолжить

Кроме того, если вы хотите загрузить файл, вы можете использовать wget. Для этого вам потребуется обновить wget, снова введя эти команды через SSH или YunSerialTerminal:

opkg update
opkg upgrade wget

И тогда вы можете просто сделать это в своем скетче:

Process process;
process.runShellCommand("wget http://example.net");
while(p.running()); // это ожидает выполнения команды, прежде чем продолжить
,

возможно ли использовать Arduino Yun Shield? вместо Ардуино Юн!, @Ciasto piekarz


8

Я перечисляю это как ответ, чтобы на него была ссылка здесь. Это еще не полноценный https, но он работает над этим, и в будущем это может быть реализовано. http://evothings.com/is-it-possible-to -secure-micro-controllers-used-in-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 он может реализовать.

,

Не могли бы вы поместить самое интересное из размещенной вами ссылки, чтобы читатели сразу увидели, стоит ли читать дальше или нет? В противном случае ваш ответ не будет соответствовать политике SE и его придется закрыть., @jfpoilpret


12

(Отказ от ответственности: на самом деле я являюсь автором статьи на evothings.com)
Arduino UNO более чем способен выполнять TLS. Я только что закончил серию постов в блоге на эту тему. У меня есть рабочий пример Arduino UNO, выполняющего криптографию на основе эллиптических кривых (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.

,

1

Решением может быть использование Wi-Fi Shield — он поддерживает HTTPS.

https://www.arduino.cc/en/Reference/WiFi101

,