

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Perpustakaan Secure Sockets
<a name="secure-sockets"></a>

**penting**  <a name="deprecation-message-library"></a>
Pustaka ini di-host di repositori Amazon-Freertos yang tidak digunakan lagi. Kami menyarankan Anda [mulai di sini](freertos-getting-started-modular.md) ketika Anda membuat proyek baru. Jika Anda sudah memiliki proyek FreeRTOS yang sudah ada berdasarkan repositori Amazon-Freertos yang sekarang tidak digunakan lagi, lihat. [Panduan Migrasi Repositori Github Amazon-freertos](github-repo-migration.md)

## Ikhtisar
<a name="freertos-secure-sockets-overview"></a>

Anda dapat menggunakan pustaka FreeRTOS [Secure Sockets](https://docs.aws.amazon.com/freertos/latest/lib-ref/html2/secure_sockets/index.html) untuk membuat aplikasi tertanam yang berkomunikasi dengan aman. Perpustakaan ini dirancang untuk memudahkan onboarding bagi pengembang perangkat lunak dari berbagai latar belakang pemrograman jaringan.

Pustaka FreeRTOS Secure Sockets didasarkan pada antarmuka soket Berkeley, dengan opsi komunikasi aman tambahan oleh protokol TLS. [Untuk informasi tentang perbedaan antara pustaka FreeRTOS Secure Sockets dan antarmuka soket Berkeley, `SOCKETS_SetSockOpt` lihat di Referensi API Secure Sockets.](https://docs.aws.amazon.com/freertos/latest/lib-ref/html2/secure_sockets/index.html)

**catatan**  
Saat ini, hanya klien APIs, ditambah implementasi [IP ringan (LWiP](https://savannah.nongnu.org/projects/lwip/)) dari API `Bind` sisi server, yang didukung untuk FreeRTOS Secure Sockets.

## Ketergantungan dan persyaratan
<a name="freertos-secure-sockets-dependencies"></a>

Pustaka FreeRTOS Secure Sockets bergantung pada tumpukan dan TCP/IP implementasi TLS. Port untuk FreeRTOS memenuhi dependensi ini dalam salah satu dari tiga cara:
+ Implementasi kustom keduanya TCP/IP dan TLS
+ [Implementasi kustom TCP/IP, dan lapisan FreeRTOS TLS dengan mbedTLS](https://en.wikipedia.org/wiki/Mbed_TLS)
+ [FreerTos\$1TCP dan lapisan FreeRTOS TLS](https://freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/index.html) [dengan mbedTLS](https://en.wikipedia.org/wiki/Mbed_TLS)

Diagram ketergantungan di bawah ini menunjukkan implementasi referensi yang disertakan dengan pustaka FreeRTOS Secure Sockets. Implementasi referensi ini mendukung TLS dan TCP/IP over Ethernet dan Wi-Fi dengan Freertos\$1TCP dan mBedTLS sebagai dependensi. Untuk informasi selengkapnya tentang layer FreeRTOS TLS, lihat. [Keamanan Lapisan Transportasi](security-tls.md)

![\[Arsitektur Secure Sockets Library dengan Freertos+TCP, TLS Layer, dan komponen TLS.\]](http://docs.aws.amazon.com/id_id/freertos/latest/userguide/images/sockets-dependencies.png)


## Fitur
<a name="freertos-secure-sockets-features"></a>

Fitur perpustakaan FreeRTOS Secure Sockets meliputi:
+ Antarmuka standar berbasis soket Berkeley
+ Thread-safe APIs untuk mengirim dan menerima data
+ Easy-to-enable TLS

## Pemecahan masalah
<a name="freertos-secure-sockets-troubleshooting"></a>

### Kode eror
<a name="w2aac31b9c13c45c15b5"></a>

Kode kesalahan yang dikembalikan oleh pustaka FreeRTOS Secure Sockets adalah nilai negatif. Untuk informasi selengkapnya tentang setiap kode kesalahan, lihat Kode Kesalahan Soket Aman di [Referensi API Soket Aman](https://docs.aws.amazon.com/freertos/latest/lib-ref/html2/secure_sockets/index.html).

**catatan**  
Jika FreeRTOS Secure Sockets API mengembalikan kode kesalahan, maka, yang bergantung pada [Perpustakaan CoreMQTT](coremqtt.md) pustaka Freertos Secure Sockets, mengembalikan kode kesalahan. `AWS_IOT_MQTT_SEND_ERROR`

## Dukungan pengembang
<a name="freertos-secure-sockets-support"></a>

Pustaka FreeRTOS Secure Sockets mencakup dua makro pembantu untuk menangani alamat IP:

**`SOCKETS_inet_addr_quick`**  
Makro ini mengubah alamat IP yang dinyatakan sebagai empat oktet numerik terpisah menjadi alamat IP yang dinyatakan sebagai nomor 32-bit dalam urutan jaringan-byte.

**`SOCKETS_inet_ntoa`**  
Makro ini mengubah alamat IP yang dinyatakan sebagai nomor 32-bit dalam urutan byte jaringan menjadi string dalam notasi desimal titik.

## Pembatasan penggunaan
<a name="freertos-secure-sockets-restrictions"></a>

Hanya soket TCP yang didukung oleh perpustakaan FreeRTOS Secure Sockets. Soket UDP tidak didukung.

Server tidak APIs didukung oleh pustaka Freertos Secure Sockets, kecuali untuk implementasi [IP ringan (LWiP) dari API](https://savannah.nongnu.org/projects/lwip/) sisi server. `Bind` APIs Klien didukung.

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

Untuk menggunakan pustaka FreeRTOS Secure Sockets, Anda perlu menginisialisasi perpustakaan dan dependensinya. Untuk menginisialisasi library Secure Sockets, gunakan kode berikut dalam aplikasi Anda:

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

Pustaka dependen harus diinisialisasi secara terpisah. Misalnya, jika Freertos\$1TCP adalah dependensi, Anda perlu memanggil dalam aplikasi Anda juga. [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)

## Referensi API
<a name="freertos-secure-sockets-api"></a>

Untuk referensi API selengkapnya, lihat Referensi [API Secure Sockets](https://docs.aws.amazon.com/freertos/latest/lib-ref/html2/secure_sockets/index.html).

## Contoh penggunaan
<a name="freertos-secure-sockets-example"></a>

Kode berikut menghubungkan klien ke 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 );
}
```

Untuk contoh lengkap, lihat[Soket Aman menggemakan demo klien](secure-sockets-demo.md).

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

FreeRTOS Secure Sockets bergantung pada tumpukan dan TCP/IP implementasi TLS. Bergantung pada tumpukan Anda, untuk mem-port pustaka Secure Sockets, Anda mungkin perlu mem-port beberapa hal berikut:
+ Tumpukan [ TCP/IP Freertos\$1TCP](https://freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/index.html)
+ Sebuah [PKCS11 perpustakaan inti](security-pkcs.md)
+ Sebuah [Keamanan Lapisan Transportasi](security-tls.md)

Untuk informasi selengkapnya tentang porting, lihat [Porting Perpustakaan Soket Aman](https://docs.aws.amazon.com/freertos/latest/portingguide/afr-porting-ss.html) di Panduan Porting FreerTOS.