

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

# Demo otentikasi timbal balik CoreMQTT
<a name="mqtt-demo-ma"></a>

**penting**  <a name="deprecation-message-demo"></a>
Demo ini di-host di Amazon-FreeRTOS repositori 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 ada berdasarkan repositori yang sekarang tidak digunakan lagi, Amazon-FreeRTOS lihat. [Amazon-FreeRTOS Panduan Migrasi Repositori Github](github-repo-migration.md)

## Pengantar
<a name="mqtt-demo-ma-introduction"></a>

Proyek demo otentikasi timbal balik CoreMQTT menunjukkan kepada Anda cara membuat koneksi ke broker MQTT menggunakan TLS dengan otentikasi timbal balik antara klien dan server. [Demo ini menggunakan implementasi antarmuka TLS-based transport mbed untuk membuat server dan koneksi TLS yang diautentikasi klien, dan menunjukkan alur kerja subscribe-publish MQTT pada level QoS 1.](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/errata01/os/mqtt-v3.1.1-errata01-os-complete.html#_Toc442180914) Ini berlangganan filter topik, kemudian menerbitkan ke topik yang cocok dengan filter dan menunggu penerimaan pesan-pesan itu kembali dari server di tingkat QoS 1. Siklus penerbitan ke broker dan menerima pesan yang sama kembali dari broker diulang tanpa batas waktu. Pesan dalam demo ini dikirim di QoS 1, yang menjamin setidaknya satu pengiriman sesuai dengan spesifikasi MQTT.

**catatan**  
Untuk mengatur dan menjalankan demo FreeRTOS, ikuti langkah-langkahnya. [Memulai dengan FreeRTOS](freertos-getting-started.md)

## Kode sumber
<a name="mqtt-demo-ma-source-code"></a>

File sumber demo diberi nama `mqtt_demo_mutual_auth.c` dan dapat ditemukan di `{{freertos}}/demos/coreMQTT/` direktori dan [ GitHub](https://github.com/aws/amazon-freertos/blob/main/demos/coreMQTT/mqtt_demo_mutual_auth.c)situs web.

## Fungsionalitas
<a name="mqtt-demo-ma-functionality"></a>

Demo menciptakan tugas aplikasi tunggal yang berputar melalui serangkaian contoh yang menunjukkan cara terhubung ke broker, berlangganan topik di broker, mempublikasikan ke topik di broker, lalu akhirnya, putuskan sambungan dari broker. Aplikasi demo berlangganan dan menerbitkan topik yang sama. Setiap kali demo menerbitkan pesan ke broker MQTT, broker mengirim pesan yang sama kembali ke aplikasi demo.

Penyelesaian demo yang berhasil akan menghasilkan output yang mirip dengan gambar berikut.

![Output terminal demo MQTT pada penyelesaian yang berhasil](http://docs.aws.amazon.com/id_id/freertos/latest/userguide/images/coremqtt-mad-output.png)


 AWS IoT Konsol akan menghasilkan output yang mirip dengan gambar berikut.

![Output konsol demo MQTT pada penyelesaian yang berhasil](http://docs.aws.amazon.com/id_id/freertos/latest/userguide/images/coremqtt-mad-console.png)


## Coba lagi logika dengan backoff eksponensial dan jitter
<a name="mqtt-demo-ma-retry-logic"></a>

BackoffForRetryFungsi [prv](https://github.com/aws/amazon-freertos/blob/main/demos/coreMQTT/mqtt_demo_mutual_auth.c#L671-L717) menunjukkan bagaimana operasi jaringan yang gagal dengan server, misalnya, koneksi TLS atau permintaan berlangganan MQTT, dapat dicoba ulang dengan backoff eksponensial dan jitter. Fungsi menghitung periode backoff untuk upaya coba lagi berikutnya, dan melakukan penundaan backoff jika upaya coba lagi belum habis. Karena perhitungan periode backoff membutuhkan pembuatan angka acak, fungsi tersebut menggunakan modul PKCS11 untuk menghasilkan angka acak. Penggunaan modul PKCS11 memungkinkan akses ke True Random Number Generator (TRNG) jika platform vendor mendukungnya. Kami menyarankan Anda menyemai generator angka acak dengan sumber entropi khusus perangkat sehingga kemungkinan tabrakan dari perangkat selama percobaan ulang koneksi dikurangi.

## Menghubungkan ke broker MQTT
<a name="mqtt-demo-ma-connecting"></a>

ConnectToServerWithBackoffRetriesFungsi [prv](https://github.com/aws/amazon-freertos/blob/main/demos/coreMQTT/mqtt_demo_mutual_auth.c#L721-L782) mencoba membuat koneksi TLS yang saling diautentikasi ke broker MQTT. Jika koneksi gagal, itu mencoba lagi setelah periode backoff. Periode backoff akan meningkat secara eksponensial sampai jumlah upaya maksimum tercapai atau periode backoff maksimum tercapai. `BackoffAlgorithm_GetNextBackoff`Fungsi ini memberikan nilai backoff yang meningkat secara eksponensial dan pengembalian `RetryUtilsRetriesExhausted` ketika jumlah upaya maksimum telah tercapai. `prvConnectToServerWithBackoffRetries`Fungsi mengembalikan status kegagalan jika koneksi TLS ke broker tidak dapat dibuat setelah jumlah upaya yang dikonfigurasi.

CreateMQTTConnectionWithBrokerFungsi [prv](https://github.com/aws/amazon-freertos/blob/main/demos/coreMQTT/mqtt_demo_mutual_auth.c#L785-L848) menunjukkan cara membuat koneksi MQTT ke broker MQTT dengan sesi bersih. Ini menggunakan antarmuka transportasi TLS, yang diimplementasikan dalam `FreeRTOS-Plus/Source/Application-Protocols/platform/freertos/transport/src/tls_freertos.c` file. Perlu diingat bahwa kami sedang mengatur detik keep-alive untuk broker. `xConnectInfo`

Fungsi selanjutnya menunjukkan bagaimana antarmuka transport TLS dan fungsi waktu diatur dalam konteks MQTT menggunakan fungsi tersebut. `MQTT_Init` Hal ini juga menunjukkan bagaimana sebuah event callback function pointer (`prvEventCallback`) diatur. Callback ini digunakan untuk melaporkan pesan masuk.

## Berlangganan topik MQTT
<a name="mqtt-demo-ma-subscribing"></a>

MQTTSubscribeWithBackoffRetriesFungsi [prv](https://github.com/aws/amazon-freertos/blob/main/demos/coreMQTT/mqtt_demo_mutual_auth.c#L871-L969) menunjukkan cara berlangganan filter topik pada broker MQTT. Contoh ini menunjukkan cara berlangganan satu filter topik, tetapi dimungkinkan untuk meneruskan daftar filter topik dalam panggilan API berlangganan yang sama untuk berlangganan lebih dari satu filter topik. Juga, jika broker MQTT menolak permintaan berlangganan, langganan akan mencoba lagi, dengan dukungan eksponensial, untuk. `RETRY_MAX_ATTEMPTS`

## Menerbitkan ke topik
<a name="mqtt-demo-ma-publishing"></a>

MQTTPublishToTopicFungsi [prv](https://github.com/aws/amazon-freertos/blob/main/demos/coreMQTT/mqtt_demo_mutual_auth.c#L972-L1004) menunjukkan cara mempublikasikan ke topik di broker MQTT. 

## Menerima pesan masuk
<a name="mqtt-demo-ma-receiving"></a>

Aplikasi mendaftarkan fungsi callback peristiwa sebelum terhubung ke broker, seperti yang dijelaskan sebelumnya. `prvMQTTDemoTask`Fungsi ini memanggil `MQTT_ProcessLoop` fungsi untuk menerima pesan masuk. Ketika pesan MQTT masuk diterima, ia memanggil fungsi callback acara yang terdaftar oleh aplikasi. EventCallbackFungsi [prv](https://github.com/aws/amazon-freertos/blob/main/demos/coreMQTT/mqtt_demo_mutual_auth.c#L1139-L1154) adalah contoh dari fungsi callback event tersebut. `prvEventCallback`memeriksa jenis paket yang masuk dan memanggil handler yang sesuai. Dalam contoh di bawah ini, fungsi panggilan `prvMQTTProcessIncomingPublish()` untuk menangani pesan publikasi masuk atau `prvMQTTProcessResponse()` untuk menangani pengakuan (ACK).

## Memproses paket publikasi MQTT yang masuk
<a name="mqtt-demo-ma-processing"></a>

MQTTProcessIncomingPublishFungsi [prv](https://github.com/aws/amazon-freertos/blob/main/demos/coreMQTT/mqtt_demo_mutual_auth.c#L1108-L1135) menunjukkan cara memproses paket publikasi dari broker MQTT. 

## Berhenti berlangganan dari suatu topik
<a name="mqtt-demo-ma-unsubscribing"></a>

Langkah terakhir dalam alur kerja adalah berhenti berlangganan dari topik sehingga broker tidak akan mengirim pesan yang dipublikasikan. `mqttexampleTOPIC` Berikut adalah definisi dari fungsi [prv MQTTUnsubscribeFromTopic](https://github.com/aws/amazon-freertos/blob/main/demos/coreMQTT/mqtt_demo_mutual_auth.c#L1007-L1043).

## Mengubah root CA yang digunakan dalam demo
<a name="mqtt-demo-ma-root-ca"></a>

Secara default, demo FreeRTOS menggunakan sertifikat Amazon Root CA 1 (kunci RSA 2048 bit) untuk mengautentikasi dengan server. AWS IoT Core Dimungkinkan untuk menggunakan [sertifikat CA lainnya untuk otentikasi server](https://docs.aws.amazon.com/iot/latest/developerguide/server-authentication.html#server-authentication-certs), termasuk sertifikat Amazon Root CA 3 (kunci ECC 256 bit). Untuk mengubah CA root untuk demo otentikasi timbal balik CoreMQTT: 

1. Dalam editor teks, buka `{{freertos}}/vendors/{{vendor}}/boards/{{board}}/aws_demos/config_files/mqtt_demo_mutual_auth_config.h` file.

1. Dalam file, cari baris berikut.

   ```
    * #define democonfigROOT_CA_PEM    "...insert here..." 
   ```

   Hapus komentar baris ini dan, jika perlu, pindahkan melewati akhir ` */` blok komentar.

1. Salin sertifikat CA yang ingin Anda gunakan lalu tempel di `"...insert here..."` teks. Hasilnya akan terlihat seperti contoh berikut ini.

   ```
   #define democonfigROOT_CA_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"
   ```

1. (Opsional) Anda dapat mengubah CA root untuk demo lainnya. Ulangi langkah 1 hingga 3 untuk setiap `{{freertos}}/vendors/{{vendor}}/boards/{{board}}/aws_demos/config_files/{{demo-name}}_config.h` file.