Как получить 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

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

Юн обрабатывает https на стороне Linux с помощью таких программ, как curl, wget или python. Ваш эскиз может просто делегировать задачу стороне Linux.

Несмотря на то, что curl работает нормально, несмотря на предустановленный python, вам нужно вручную установить python-openssl, поскольку он недоступен сразу после установки (из-за ограничений дискового пространства)

Федерико Фиссоре
источник
Когда вы говорите: «Юн обрабатывает https на стороне Linux», вы имеете в виду Arduino Yún или Yún Shield?
Ciasto piekarz
curl wget или python не имеет ничего общего с https
Peter
8

(Отказ от ответственности: я на самом деле автор статьи 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.

Аарон Ардири
источник
6

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

Вам может быть интересно посмотреть на это .

JVarhol
источник
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 от Yún.

Первый способ сделать это - использовать 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
hichris123
источник
также возможно ли использовать Arduino Yún Shield? вместо Arduino Yún!
Ciasto piekarz