As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Biblioteca de Secure Sockets
Importante
Essa biblioteca está hospedada no RTOS repositório Amazon-Free, que está obsoleto. Recomendamos começar aqui ao criar um novo projeto. Se você já tem um RTOS projeto gratuito existente com base no repositório Amazon-FreeRTOS, agora obsoleto, consulte o. Guia de migração do RTOS repositório Github gratuito da Amazon
Visão geral
Você pode usar a biblioteca Free RTOS Secure Sockets para criar aplicativos incorporados que se comunicam com segurança. A biblioteca foi projetada para facilitar a integração de desenvolvedores de software de várias bases de programação de rede.
A biblioteca Free RTOS Secure Sockets é baseada na interface de soquetes Berkeley, com uma opção adicional de comunicação segura por protocolo. TLS Para obter informações sobre as diferenças entre a biblioteca Free RTOS Secure Sockets e a interface de soquetes Berkeley, consulte a Secure Sockets SOCKETS_SetSockOpt
Reference. API
nota
Atualmente, somente o clienteAPIs, além de uma implementação de IP leve (LWIPBind
API lado do servidor, é compatível com Free Secure Sockets. RTOS
Dependências e requisitos
A biblioteca Free RTOS Secure Sockets depende de uma pilha TCP /IP e de uma implementação. TLS O Ports for Free RTOS atende a essas dependências de uma das três maneiras:
-
Uma implementação personalizada de TCP /IP e TLS
-
Uma implementação personalizada de TCP /IP e da RTOS TLS camada livre com mbed TLS
-
Free RTOS + TCP
e a RTOS TLS camada Free com incorporação TLS
O diagrama de dependências abaixo mostra a implementação de referência incluída na biblioteca Free RTOS Secure Sockets. Essa implementação de referência suporta TLS TCP e/IP sobre Ethernet e Wi-Fi com Free RTOS + TCP e mbed TLS como dependências. Para obter mais informações sobre a RTOS TLS camada Livre, consulteTransport Layer Security.
Recursos
Os recursos gratuitos da biblioteca RTOS Secure Sockets incluem:
-
Uma interface padrão baseada em soquetes Berkeley
-
Thread-safe APIs para enviar e receber dados
-
Easy-to-enable TLS
Solução de problemas
Códigos de erro
Os códigos de erro que a biblioteca Free RTOS Secure Sockets retorna são valores negativos. Para obter mais informações sobre cada código de erro, consulte Códigos de erro do Secure Sockets na Referência do Secure Sockets API.
nota
Se o Free RTOS Secure Sockets API retornar um código de erro, oMQTTbiblioteca principal, que depende da biblioteca Free RTOS Secure Sockets, retornará o código de erro. AWS_IOT_MQTT_SEND_ERROR
Suporte ao desenvolvedor
A biblioteca Free RTOS Secure Sockets inclui duas macros auxiliares para lidar com endereços IP:
SOCKETS_inet_addr_quick
-
Essa macro converte um endereço IP expresso por quatro octetos numéricos separados em um endereço IP expresso como um número de 32 bits em ordem de bytes de rede.
SOCKETS_inet_ntoa
-
Essa macro converte um endereço IP expresso como um número de 32 bits em ordem de bytes de rede em uma string com notação de ponto decimal.
Restrições de uso
Somente TCP soquetes são suportados pela biblioteca Free RTOS Secure Sockets. UDPsoquetes não são suportados.
APIsOs servidores não são suportados pela biblioteca Free RTOS Secure Sockets, exceto por uma implementação de IP leve (LWIPBind
API O cliente APIs é suportado.
Inicialização
Para usar a biblioteca Free RTOS Secure Sockets, você precisa inicializar a biblioteca e suas dependências. Para inicializar a biblioteca de Secure Sockets, use o seguinte código na aplicação:
BaseType_t xResult = pdPASS; xResult = SOCKETS_Init();
As bibliotecas dependentes devem ser inicializadas separadamente. Por exemplo, se Free RTOS + TCP for uma dependência, você também precisará invocar FreeRTOS_IPInit
Referência do API
Para obter uma API referência completa, consulte Secure Sockets API Reference.
Exemplo de uso
O código a seguir conecta um cliente a um servidor.
#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 ); }
Para obter um exemplo completo, consulte Demonstração do cliente Echo de Secure Sockets.
Portabilidade
O Free RTOS Secure Sockets depende de uma pilha TCP /IP e de uma implementação. TLS Dependendo da pilha, para transferir a biblioteca de Secure Sockets, será necessário transferir alguns dos seguintes:
Para obter mais informações sobre portabilidade, consulte Porting the Secure Sockets Library no Free RTOS Porting Guide.