セキュアソケットライブラリ - 無料RTOS

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

セキュアソケットライブラリ

重要

このライブラリは、廃止された Amazon 無料RTOSリポジトリでホストされています。新しいプロジェクトを作成するときは、ここから始めることをお勧めします。廃止された Amazon-FreeRTOS リポジトリに基づく既存の FreeRTOS プロジェクトがすでにある場合は、「」を参照してくださいAmazon-FreeRTOS Github リポジトリ移行ガイド

概要

フリーRTOSセキュアソケットライブラリを使用して、安全に通信する組み込みアプリケーションを作成できます。このライブラリは、さまざまなネットワークプログラミングの経歴を持つソフトウェア開発者が簡単にオンボードを行えるように設計されています。

フリーRTOSセキュアソケットライブラリは、TLSプロトコル別の追加の安全な通信オプションを備えたバークレーソケットインターフェイスに基づいています。フリーRTOSセキュアソケットライブラリとバークレーソケットインターフェイスの違いについては、「 セキュアソケットリファレンスSOCKETS_SetSockOpt」の「」を参照してください。 API

注記

現在、無料RTOSセキュアソケットではAPIs、クライアント とサーバー側 の軽量 IP (lwIP) Bind 実装のみがサポートAPIされています。

依存関係と要件

無料RTOSセキュアソケットライブラリは、TCP/IP スタックとTLS実装によって異なります。Ports for FreeRTOS は、次の 3 つの方法のいずれかでこれらの依存関係を満たします。

  • TCP/IP と の両方のカスタム実装 TLS

  • TCP/IP のカスタム実装と mbedTLS を使用した FreeRTOS TLS Layer

  • FreeRTOS+TCPmbedTLS を使用した FreeRTOS TLSレイヤー

以下の依存関係図は、 無料RTOSセキュアソケットライブラリに含まれているリファレンス実装を示しています。このリファレンス実装は、依存関係として FreeRTOS+TCP TLSおよび mbedTLS を使用したイーサネットおよび Wi-Fi 経由の および TCP/IP をサポートしています。無料RTOSTLSレイヤーの詳細については、「」を参照してくださいTransport Layer Security

FreeRTOS+、TLSレイヤーTCP、および TLSコンポーネントを使用した Secure Sockets Library アーキテクチャ。

機能

無料のRTOSセキュアソケットライブラリの機能は次のとおりです。

  • 標準のバークレーソケットベースのインターフェイス

  • データの送受信APIsのためのスレッドセーフ

  • Easy-to-enable TLS

トラブルシューティング

エラーコード

フリーRTOSセキュアソケットライブラリが返すエラーコードは負の値です。各エラーコードの詳細については、「 セキュアソケットAPIリファレンス」の「 セキュアソケットエラーコード」を参照してください。

注記

フリーRTOSセキュアソケットがエラーコードをAPI返コアMQTTライブラリす場合、フリーRTOSセキュアソケットライブラリに依存する はエラーコード を返しますAWS_IOT_MQTT_SEND_ERROR

開発者サポート

無料RTOSセキュアソケットライブラリには、IP アドレスを処理するための 2 つのヘルパーマクロが含まれています。

SOCKETS_inet_addr_quick

このマクロは、4 つの別個のオクテットで表現された IP アドレスを、ネットワークバイト順に 32 ビットの数値で表現された IP アドレスに変換します。

SOCKETS_inet_ntoa

このマクロは、ネットワークバイト順に 32 ビットの数値で表現された IP アドレスを、ドット区切りの 10 進数表記の文字列に変換します。

使用制限

TCP ソケットのみが 無料RTOSセキュアソケットライブラリでサポートされています。 UDPソケットはサポートされていません。

サーバーAPIsは、サーバー側 の軽量 IP (lwIP) 実装を除き、FreeRTOS Secure Sockets Bind ライブラリではサポートされていませんAPI。クライアントAPIsがサポートされています。

初期化

無料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移植ガイド」の「セキュアソケットライブラリの移植」を参照してください。