Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Secure-Sockets-Bibliothek
Wichtig
Diese Bibliothek wird im RTOS Amazon-Free-Repository gehostet, das veraltet ist. Wir empfehlen, dass Sie hier beginnen, wenn Sie ein neues Projekt erstellen. Wenn Sie bereits über ein bestehendes kostenloses RTOS Projekt verfügen, das auf dem inzwischen veralteten RTOS Amazon-Free-Repository basiert, finden Sie weitere Informationen unter. Leitfaden zur Migration des kostenlosen RTOS Github-Repositorys von Amazon
Übersicht
Sie können die Free RTOS Secure Sockets-Bibliothek verwenden, um eingebettete Anwendungen zu erstellen, die sicher kommunizieren. Die Bibliothek dient dem einfachen Einstieg von Softwareentwicklern mit unterschiedlichem Hintergrund im Bereich Netzwerkprogrammierung.
Die Free RTOS Secure Sockets-Bibliothek basiert auf der Berkeley-Sockets-Schnittstelle und bietet eine zusätzliche sichere Kommunikationsoption per TLS Protokoll. Informationen zu den Unterschieden zwischen der Free RTOS Secure Sockets-Bibliothek und der Berkeley-Sockets-Schnittstelle finden Sie SOCKETS_SetSockOpt
in der Secure API Sockets-Referenz.
Anmerkung
Derzeit werden nur Clients APIs und eine Bind
APIserverseitige Lightweight IP (LwIP)
Abhängigkeiten und Anforderungen
Die Free RTOS Secure Sockets-Bibliothek hängt von einem TCP /IP-Stack und einer Implementierung ab. TLS Ports for Free RTOS erfüllt diese Abhängigkeiten auf eine von drei Arten:
-
Eine benutzerdefinierte Implementierung von TCP /IP und TLS
-
Eine benutzerdefinierte Implementierung von TCP /IP und der Free RTOS TLS Layer mit mbed TLS
Das folgende Abhängigkeitsdiagramm zeigt die Referenzimplementierung, die in der Free RTOS Secure Sockets-Bibliothek enthalten ist. Diese Referenzimplementierung unterstützt TLS TCP /IP über Ethernet und Wi-Fi mit RTOS Free+ TCP und mbed TLS als Abhängigkeiten. Weitere Informationen zur RTOS TLS Ebene Free finden Sie unter. Transport Layer Security
Features
Zu den Funktionen der kostenlosen RTOS Secure Sockets-Bibliothek gehören:
-
Eine Standard-, Berkeley-Sockets-basierte Schnittstelle
-
Thread-sicher APIs für das Senden und Empfangen von Daten
-
Easy-to-enable TLS
Fehlerbehebung
Fehlercodes
Die Fehlercodes, die die Free RTOS Secure Sockets-Bibliothek zurückgibt, sind negative Werte. Weitere Informationen zu den einzelnen Fehlercodes finden Sie unter Secure Sockets-Fehlercodes in der Secure API Sockets-Referenz.
Anmerkung
Wenn Free RTOS Secure Sockets einen Fehlercode API zurückgibt, gibt derMQTTKernbibliothek, der von der Free RTOS Secure Sockets-Bibliothek abhängt, den Fehlercode zurückAWS_IOT_MQTT_SEND_ERROR
.
Developer Support
Die Free RTOS Secure Sockets-Bibliothek enthält zwei Hilfsmakros für den Umgang mit IP-Adressen:
SOCKETS_inet_addr_quick
-
Dieses Makro wandelt eine IP-Adresse, die als vier separate numerische Oktette ausgedrückt wird, in eine IP-Adresse um, die als 32-Bit-Zahl in Netzwerk-Byte-Reihenfolge ausgedrückt wird.
SOCKETS_inet_ntoa
-
Dieses Makro wandelt eine IP-Adresse, die als 32-Bit-Zahl in Netzwerk-Byte-Reihenfolge ausgedrückt wird, in eine Zeichenkette in Dezimalpunkt-Notation um.
Nutzungsbeschränkungen
Nur TCP Sockets werden von der Free RTOS Secure Sockets-Bibliothek unterstützt. UDPSockets werden nicht unterstützt.
Server APIs werden von der Free RTOS Secure Sockets-Bibliothek nicht unterstützt, mit Ausnahme einer Lightweight IP (lwIP)Bind
API Clients APIs werden unterstützt.
Initialisierung
Um die Free RTOS Secure Sockets-Bibliothek verwenden zu können, müssen Sie die Bibliothek und ihre Abhängigkeiten initialisieren. Um die Secure-Sockets-Bibliothek zu initialisieren, verwenden Sie den folgenden Code in Ihrer Anwendung:
BaseType_t xResult = pdPASS; xResult = SOCKETS_Init();
Abhängige Bibliotheken müssen separat initialisiert werden. Wenn Free RTOS + beispielsweise eine Abhängigkeit TCP ist, müssen Sie sie auch FreeRTOS_IPInit
API-Referenz
Eine vollständige API Referenz finden Sie unter Secure Sockets API Reference.
Beispielverwendung
Der folgende Code verbindet einen Client mit einem Server.
#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 ); }
Ein vollständiges Beispiel finden Sie unter Secure Sockets Echo-Client-Demo.
Portierung
Free RTOS Secure Sockets hängt von einem TCP /IP-Stack und einer TLS Implementierung ab. Abhängig von Ihrem Stack müssen Sie für die Portierung der Secure-Sockets-Bibliothek möglicherweise einige der folgenden Portierungen vornehmen:
Weitere Informationen zur Portierung finden Sie unter Portierung der Secure Sockets Library im Free RTOS Porting Guide.