간단히 말해 : Arduino에서 HTTPS 연결을 얻는 방법이 있습니까?
나는 그것을 찾고 있었고, 표준 라이브러리와 이더넷 쉴드로는 불가능하다는 것을 알았지 만 그것을 할 수있는 사용자 정의 라이브러리가 있습니까?
WiFi 쉴드와 같은 보조 프로세서는 어떻습니까? Arduino Yún에 SSL이 있는지 아는 사람이 있습니까?
간단히 말해 : Arduino에서 HTTPS 연결을 얻는 방법이 있습니까?
나는 그것을 찾고 있었고, 표준 라이브러리와 이더넷 쉴드로는 불가능하다는 것을 알았지 만 그것을 할 수있는 사용자 정의 라이브러리가 있습니까?
WiFi 쉴드와 같은 보조 프로세서는 어떻습니까? Arduino Yún에 SSL이 있는지 아는 사람이 있습니까?
답변:
Arduino에 장착 된 MCU는 https 연결을 처리 할 수있는 마력이 없습니다.
Yún은 curl, wget 또는 python과 같은 소프트웨어 를 사용하여 Linux 측 에서 https 를 처리 합니다. 스케치는 작업을 Linux 측에 위임 할 수 있습니다.
curl은 사전 설치되어 있음에도 불구하고 잘 작동하지만 python-openssl은 디스크 공간 제약으로 인해 즉시 사용할 수 없으므로 python-openssl을 수동으로 설치해야합니다.
(면책 조항 : 저는 실제로 evothings.com 기사의 저자입니다.)
Arduino UNO는 TLS를 능가합니다. 방금 주제에 대한 블로그 게시물 시리즈를 완성했습니다. 지속적인 통신을 위해 AES-128 키를 교환하기 위해 타원 곡선 암호화 (sect163r2)를 수행하는 Arduino UNO의 실제 예가 있습니다.
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 연결을 시도하는 다른 방법을 사용했습니다. 대신에 동일한 프로토콜을 사용하지만 안전하지 않은 통신 채널을 사용합니다. HTTP에서 거의 TLS.
나는 이것을 여기에 연결하기위한 대답으로 나열합니다. 아직 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 구현에 얼마나 가까운지를 알기 위해 테스트 서버를 설정하는 중입니다.
Federico Fissore가 위에서 언급했듯이 Yún은 Yún의 Linux 측에서만 HTTPS (또는 SSL을 호출하려는 모든 SSL) 만 처리 할 수 있습니다.
첫 번째 방법은 Python을 Python OpenSSL과 함께 사용하는 것입니다. 이를 수행하는 방법은 SSH 또는 YunSerialTerminal을 통해 다음 명령을 실행하는 것입니다.
opkg update
opkg install python-openssl
opkg update
패키지 목록이 최신인지 확인한 다음 opkg install
Python OpenSSL 을 설치합니다. 그런 다음 Python을 사용하여 Arduino와 대화 할 수 있습니다. Arduino 웹 사이트의이 페이지는 Arduino 와 함께 Python을 사용하는 데 도움이됩니다.
스케치 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
WiFi 쉴드를 사용하는 것이 해결책이 될 수 있습니다. HTTPS를 지원합니다.