

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Bibliothèque Secure Sockets
<a name="secure-sockets"></a>

**Important**  <a name="deprecation-message-library"></a>
Cette bibliothèque est hébergée sur le référentiel Amazon-FreeRTOS, qui est obsolète. Nous vous recommandons de [commencer ici](freertos-getting-started-modular.md) lorsque vous créez un nouveau projet. Si vous possédez déjà un projet FreeRTOS basé sur le référentiel Amazon-FreeRTOS, désormais obsolète, consultez le. [Guide de migration du référentiel Github d'Amazon-FreeRTOS](github-repo-migration.md)

## Présentation de
<a name="freertos-secure-sockets-overview"></a>

Vous pouvez utiliser la bibliothèque [FreeRTOS Secure](https://docs.aws.amazon.com/freertos/latest/lib-ref/html2/secure_sockets/index.html) Sockets pour créer des applications intégrées qui communiquent en toute sécurité. Cette bibliothèque a été conçue pour faciliter les premiers pas des développeurs logiciels aux expériences de programmation réseau diverses.

La bibliothèque FreeRTOS Secure Sockets est basée sur l'interface des sockets de Berkeley, avec une option de communication sécurisée supplémentaire par le protocole TLS. Pour plus d'informations sur les différences entre la bibliothèque FreeRTOS Secure Sockets et l'interface des sockets Berkeley, `SOCKETS_SetSockOpt` consultez la référence de [l'](https://docs.aws.amazon.com/freertos/latest/lib-ref/html2/secure_sockets/index.html)API Secure Sockets.

**Note**  
Actuellement, seul le client APIs, ainsi qu'une implémentation [IP légère (LWiP](https://savannah.nongnu.org/projects/lwip/)) de l'API `Bind` côté serveur, sont pris en charge pour les FreeRTOS Secure Sockets.

## Dépendances et exigences
<a name="freertos-secure-sockets-dependencies"></a>

La bibliothèque FreeRTOS Secure Sockets dépend d' TCP/IP une pile et d'une implémentation TLS. Les ports pour FreeRTOS répondent à ces dépendances de trois manières :
+ Une implémentation personnalisée des deux technologies TCP/IP et du protocole TLS
+ [Une implémentation personnalisée de TCP/IP et de la couche TLS FreeRTOS avec mbedTLS](https://en.wikipedia.org/wiki/Mbed_TLS)
+ [FreeRTOS\$1TCP](https://freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/index.html) [et la couche FreeRTOS TLS avec mbedTLS](https://en.wikipedia.org/wiki/Mbed_TLS)

Le diagramme de dépendance ci-dessous montre l'implémentation de référence incluse dans la bibliothèque FreeRTOS Secure Sockets. Cette implémentation de référence prend en charge le TLS, l' TCP/IP Ethernet et le Wi-Fi avec FreeRTOS\$1TCP et mbedTLS comme dépendances. Pour plus d'informations sur la couche TLS FreeRTOS, consultez. [ : acte de révision dans un pipeline se poursuivant d'une étape à l'autre dans un flux de travail.](security-tls.md)

![\[Architecture de la bibliothèque Secure Sockets avec FreeRTOS+TCP, TLS Layer et composants TLS.\]](http://docs.aws.amazon.com/fr_fr/freertos/latest/userguide/images/sockets-dependencies.png)


## Caractéristiques
<a name="freertos-secure-sockets-features"></a>

Les fonctionnalités de la bibliothèque FreeRTOS Secure Sockets incluent :
+ Une interface standard basée sur Berkeley Sockets
+ Thread-safe APIs pour l'envoi et la réception de données
+ Easy-to-enable TLS

## Résolution des problèmes
<a name="freertos-secure-sockets-troubleshooting"></a>

### Codes d’erreur
<a name="w2aac31b9c13c45c15b5"></a>

Les codes d'erreur renvoyés par la bibliothèque FreeRTOS Secure Sockets sont des valeurs négatives. Pour plus d'informations sur chaque code d'erreur, consultez Codes d'erreur Secure Sockets dans la [Référence d'API Secure Sockets](https://docs.aws.amazon.com/freertos/latest/lib-ref/html2/secure_sockets/index.html).

**Note**  
Si l'API FreeRTOS Secure Sockets renvoie un code d'erreur, [bibliothèque CoreMQTT](coremqtt.md) le, qui dépend de la bibliothèque FreeRTOS Secure Sockets, renvoie le code d'erreur. `AWS_IOT_MQTT_SEND_ERROR`

## Developer Support
<a name="freertos-secure-sockets-support"></a>

La bibliothèque FreeRTOS Secure Sockets inclut deux macros d'assistance pour gérer les adresses IP :

**`SOCKETS_inet_addr_quick`**  
Cette macro convertit une adresse IP qui est exprimée sous la forme de quatre octets numériques distincts en adresse IP exprimée sous la forme d'un nombre 32 bits dans l'ordre des octets de réseau.

**`SOCKETS_inet_ntoa`**  
Cette macro convertit une adresse IP exprimée sous la forme d'un nombre 32 bits dans l'ordre des octets de réseau en chaîne de décimales dans la notation décimale séparée par des points.

## Restrictions liées à l'utilisation
<a name="freertos-secure-sockets-restrictions"></a>

Seuls les sockets TCP sont pris en charge par la bibliothèque FreeRTOS Secure Sockets. Les sockets UDP ne sont pas pris en charge.

 APIs Les serveurs ne sont pas pris en charge par la bibliothèque FreeRTOS Secure Sockets, à l'exception [d'une implémentation IP légère (LWiP) de l'API côté](https://savannah.nongnu.org/projects/lwip/) serveur. `Bind` APIs Les clients sont pris en charge.

## Initialisation
<a name="freertos-secure-sockets-initialization"></a>

Pour utiliser la bibliothèque FreeRTOS Secure Sockets, vous devez initialiser la bibliothèque et ses dépendances. Pour initialiser la bibliothèque Secure Sockets, utilisez le code suivant dans votre application :

```
BaseType_t xResult = pdPASS;
xResult = SOCKETS_Init();
```

Les bibliothèques dépendantes doivent être initialisées séparément. Par exemple, si FreeRTOS\$1TCP est une dépendance, vous devez également invoquer [https://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/API/FreeRTOS_IPInit.html](https://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/API/FreeRTOS_IPInit.html) dans votre application.

## Référence des API
<a name="freertos-secure-sockets-api"></a>

Pour une référence complète de l'API, consultez la section Référence de [l'API Secure Sockets](https://docs.aws.amazon.com/freertos/latest/lib-ref/html2/secure_sockets/index.html).

## Exemple d’utilisation
<a name="freertos-secure-sockets-example"></a>

Le code suivant connecte un client à un serveur.

```
#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 );
}
```

Pour obtenir un exemple complet, consultez [Démonstration du client Secure Sockets Echo](secure-sockets-demo.md).

## Portage
<a name="freertos-secure-sockets-porting"></a>

Les sockets sécurisés FreeRTOS dépendent d' TCP/IP une pile et d'une implémentation TLS. En fonction de votre pile, pour effectuer le portage de la bibliothèque Secure Sockets, vous devez parfois inclure les éléments suivants :
+ La pile [FreeRTOS\$1TCP](https://freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/index.html) TCP/IP 
+ La [PKCS11 bibliothèque de base](security-pkcs.md)
+ La [ : acte de révision dans un pipeline se poursuivant d'une étape à l'autre dans un flux de travail.](security-tls.md)

Pour plus d'informations sur le portage, consultez la section [Portage de la bibliothèque Secure Sockets](https://docs.aws.amazon.com/freertos/latest/portingguide/afr-porting-ss.html) dans le guide de portage de FreeRTOS.