보안 소켓 라이브러리 - 무료RTOS

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

보안 소켓 라이브러리

중요

이 라이브러리는 더 이상 사용되지 않는 Amazon-FreeRTOS 리포지토리에서 호스팅됩니다. 새 프로젝트를 생성할 때는 여기서 시작하는 것이 좋습니다. 현재 더 이상 사용되지 않는 Amazon-FreeRTOS 리포지토리를 기반으로 하는 기존 FreeRTOS 프로젝트가 이미 있는 경우 섹션을 참조하세요Amazon-FreeRTOS Github 리포지토리 마이그레이션 가이드.

개요

무료RTOS 보안 소켓 라이브러리를 사용하여 안전하게 통신하는 임베디드 애플리케이션을 생성할 수 있습니다. 이 라이브러리는 다양한 네트워크 프로그래밍 배경의 소프트웨어 개발자가 쉽게 온보딩할 수 있도록 설계되었습니다.

무료RTOS 보안 소켓 라이브러리는 Berkeley 소켓 인터페이스를 기반으로 TLS 하며 프로토콜별 추가 보안 통신 옵션이 있습니다. 무료RTOS 보안 소켓 라이브러리와 Berkeley 소켓 인터페이스의 차이점에 대한 자세한 내용은 보안 소켓 API 참조SOCKETS_SetSockOpt의 섹션을 참조하세요.

참고

현재는 클라이언트 APIs와 서버 측의 경량 IP(lwIP) 구현만 무료RTOS 보안 소켓에 대해 지원BindAPI됩니다.

종속성 및 요구 사항

무료RTOS 보안 소켓 라이브러리는 TCP/IP 스택 및 TLS 구현에 따라 달라집니다. 무료RTOS 포트는 다음 세 가지 방법 중 하나로 이러한 종속성을 충족합니다.

  • TCP/IP 및의 사용자 지정 구현 TLS

  • TCP/IP의 사용자 지정 구현 및 mbedTLS가 있는 프리RTOS TLS 계층

  • FreeRTOS+TCPmbedTLS가 있는 FreeRTOS TLS 계층

아래 종속성 다이어그램은 무료RTOS 보안 소켓 라이브러리에 포함된 참조 구현을 보여줍니다. 이 참조 구현은 FreeRTOS+TCP 및 mbedTLSTLS를 종속성으로 사용하는 이더넷 및 Wi-Fi를 통한 및 TCP/IP를 지원합니다. 프리RTOS TLS 계층에 대한 자세한 내용은 섹션을 참조하세요전송 계층 보안.

FreeRTOS+TCP, TLS 계층 및 TLS 구성 요소를 사용하여 소켓 라이브러리 아키텍처를 보호합니다.

특성

무료RTOS 보안 소켓 라이브러리 기능은 다음과 같습니다.

  • 표준 Berkeley 소켓 기반 인터페이스

  • 데이터 전송 및 수신APIs을 위한 Thread-safe

  • Easy-to-enable TLS

문제 해결

오류 코드

무료RTOS 보안 소켓 라이브러리가 반환하는 오류 코드는 음수 값입니다. 각 오류 코드에 대한 자세한 내용은 보안 소켓 API 참조의 보안 소켓 오류 코드를 참조하세요.

참고

무료RTOS 보안 소켓이 오류 코드를 API 반환하면 무료RTOS 보안 소켓 라이브러리에 따라 코어MQTT 라이브러리가 오류 코드를 반환합니다AWS_IOT_MQTT_SEND_ERROR.

개발자 지원

무료RTOS 보안 소켓 라이브러리에는 IP 주소를 처리하기 위한 두 가지 헬퍼 매크로가 포함되어 있습니다.

SOCKETS_inet_addr_quick

이 매크로는 네 개의 개별 숫자 옥텟으로 표현된 IP 주소를 네트워크 바이트 순서의 32비트 숫자로 표현된 IP 주소로 변환합니다.

SOCKETS_inet_ntoa

이 매크로는 네트워크 바이트 순서의 32비크 숫자로 표현된 IP 주소를 10진수 점 표기법의 문자열로 변환합니다.

사용 제한

무료RTOS 보안 소켓 라이브러리에서는 TCP 소켓만 지원됩니다. UDP 소켓은 지원되지 않습니다.

서버 측의 경량 IP(lwIP) 구현을 제외하고 서버APIs는 무료RTOS 보안 소켓 라이브러리에서 지원되지 않습니다BindAPI. 클라이언트APIs가 지원됩니다.

Initialization(초기화)

무료RTOS 보안 소켓 라이브러리를 사용하려면 라이브러리와 해당 종속성을 초기화해야 합니다. 보안 소켓 라이브러리를 초기화하려면 애플리케이션에서 다음 코드를 사용합니다.

BaseType_t xResult = pdPASS; xResult = SOCKETS_Init();

종속 라이브러리는 따로 초기화해야 합니다. 예를 들어 FreeRTOS+TCP가 종속성인 경우 애플리케이션에서도 호출해야 FreeRTOS_IPInit 합니다.

API 참조

전체 API 참조는 보안 소켓 API 참조를 참조하세요.

사용 예

다음 코드는 클라이언트를 서버에 연결합니다.

#include "aws_secure_sockets.h" #define configSERVER_ADDR0 127 #define configSERVER_ADDR1 0 #define configSERVER_ADDR2 0 #define configSERVER_ADDR3 1 #define configCLIENT_PORT 443 /* Rx and Tx timeouts are used to ensure the sockets do not wait too long for * missing data. */ static const TickType_t xReceiveTimeOut = pdMS_TO_TICKS( 2000 ); static const TickType_t xSendTimeOut = pdMS_TO_TICKS( 2000 ); /* PEM-encoded server certificate */ /* The certificate used below is one of the Amazon Root CAs.\ Change this to the certificate of your choice. */ static const char cTlsECHO_SERVER_CERTIFICATE_PEM[] = "-----BEGIN CERTIFICATE-----\n" "MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5\n" "MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g\n" "Um9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG\n" "A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg\n" "Q0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKl\n" "ui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6j\n" "QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSr\n" "ttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkr\n" "BqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteM\n" "YyRIHN8wfdVoOw==\n" "-----END CERTIFICATE-----\n"; static const uint32_t ulTlsECHO_SERVER_CERTIFICATE_LENGTH = sizeof( cTlsECHO_SERVER_CERTIFICATE_PEM ); void vConnectToServerWithSecureSocket( void ) { Socket_t xSocket; SocketsSockaddr_t xEchoServerAddress; BaseType_t xTransmitted, lStringLength; xEchoServerAddress.usPort = SOCKETS_htons( configCLIENT_PORT ); xEchoServerAddress.ulAddress = SOCKETS_inet_addr_quick( configSERVER_ADDR0, configSERVER_ADDR1, configSERVER_ADDR2, configSERVER_ADDR3 ); /* Create a TCP socket. */ xSocket = SOCKETS_Socket( SOCKETS_AF_INET, SOCKETS_SOCK_STREAM, SOCKETS_IPPROTO_TCP ); configASSERT( xSocket != SOCKETS_INVALID_SOCKET ); /* Set a timeout so a missing reply does not cause the task to block indefinitely. */ SOCKETS_SetSockOpt( xSocket, 0, SOCKETS_SO_RCVTIMEO, &xReceiveTimeOut, sizeof( xReceiveTimeOut ) ); SOCKETS_SetSockOpt( xSocket, 0, SOCKETS_SO_SNDTIMEO, &xSendTimeOut, sizeof( xSendTimeOut ) ); /* Set the socket to use TLS. */ SOCKETS_SetSockOpt( xSocket, 0, SOCKETS_SO_REQUIRE_TLS, NULL, ( size_t ) 0 ); SOCKETS_SetSockOpt( xSocket, 0, SOCKETS_SO_TRUSTED_SERVER_CERTIFICATE, cTlsECHO_SERVER_CERTIFICATE_PEM, ulTlsECHO_SERVER_CERTIFICATE_LENGTH ); if( SOCKETS_Connect( xSocket, &xEchoServerAddress, sizeof( xEchoServerAddress ) ) == 0 ) { /* Send the string to the socket. */ xTransmitted = SOCKETS_Send( xSocket, /* The socket receiving. */ ( void * )"some message", /* The data being sent. */ 12, /* The length of the data being sent. */ 0 ); /* No flags. */ if( xTransmitted < 0 ) { /* Error while sending data */ return; } SOCKETS_Shutdown( xSocket, SOCKETS_SHUT_RDWR ); } else { //failed to connect to server } SOCKETS_Close( xSocket ); }

전체 예제는 보안 소켓 에코 클라이언트 데모 단원을 참조하십시오.

이식

무료RTOS 보안 소켓은 TCP/IP 스택 및 TLS 구현에 따라 달라집니다. 스택에 따라 보안 소켓 라이브러리를 이식하려면 다음 중 일부를 이식해야 할 수 있습니다.

포팅에 대한 자세한 내용은 프리RTOS 포팅 가이드의 보안 소켓 라이브러리 이식을 참조하세요.