翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
セキュアソケットライブラリ
重要
このライブラリは、廃止された 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+TCP
と mbedTLS を使用した FreeRTOS TLSレイヤー
以下の依存関係図は、 無料RTOSセキュアソケットライブラリに含まれているリファレンス実装を示しています。このリファレンス実装は、依存関係として FreeRTOS+TCP TLSおよび mbedTLS を使用したイーサネットおよび Wi-Fi 経由の および TCP/IP をサポートしています。無料RTOSTLSレイヤーの詳細については、「」を参照してくださいTransport Layer Security。
機能
無料の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)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実装によって異なります。スタックによっては、セキュアソケットライブラリを移植するには、以下のいくつかの移植が必要になる場合があります。
-
FreeRTOS+TCP
TCP/IP スタック
移植の詳細については、「 無料RTOS移植ガイド」の「セキュアソケットライブラリの移植」を参照してください。