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

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

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

重要

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

概要

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

FreeRTOS Secure Sockets ライブラリは Berkeley ソケットインターフェイスに基づいており、TLSプロトコルごとに追加の安全な通信オプションがあります。FreeRTOS Secure Sockets ライブラリと Berkeley ソケットインターフェイスの違いについては、「Secure Sockets APIリファレンスSOCKETS_SetSockOpt」の「」を参照してください。

注記

現在、FreeRTOS Secure Sockets ではAPIs、クライアント とサーバー側の軽量 IP (lwIP) Bind 実装のみがサポートAPIされています。

依存関係と要件

FreeRTOS Secure Sockets ライブラリは、TCP/IP スタックとTLS実装によって異なります。Ports for FreeRTOS は、次の 3 つの方法のいずれかで依存関係を満たします。

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

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

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

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

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

機能

無料のRTOS Secure Sockets ライブラリの機能は次のとおりです。

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

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

  • Easy-to-enable TLS

トラブルシューティング

エラーコード

FreeRTOS Secure Sockets ライブラリが返すエラーコードは負の値です。各エラーコードの詳細については、「Secure Sockets APIリファレンス」の「Secure Sockets Error Codes」を参照してください。

注記

FreeRTOS Secure Sockets がエラーコードをAPI返コアMQTTライブラリした場合、FreeRTOS Secure Sockets ライブラリに依存する はエラーコード を返しますAWS_IOT_MQTT_SEND_ERROR

開発者サポート

FreeRTOS Secure Sockets ライブラリには、IP アドレスを処理するための 2 つのヘルパーマクロが含まれています。

SOCKETS_inet_addr_quick

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

SOCKETS_inet_ntoa

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

使用制限

FreeRTOS Secure Sockets ライブラリではTCP、ソケットのみがサポートされています。UDP ソケットはサポートされていません。

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

初期化

FreeRTOS Secure Sockets ライブラリを使用するには、ライブラリとその依存関係を初期化する必要があります。セキュアソケットライブラリを初期化するには、アプリケーションで以下のコードを使用します。

BaseType_t xResult = pdPASS; xResult = SOCKETS_Init();

依存ライブラリは個別に初期化する必要があります。例えば、Free RTOS+TCP が依存関係である場合は、アプリケーションFreeRTOS_IPInitでも を呼び出す必要があります。

API リファレンス

完全なAPIリファレンスについては、「Secure Sockets API Reference」を参照してください。

使用例

以下のコードは、クライアントをサーバーに接続します。

#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