All Products
Search
Document Center

IoT Platform:Gerbang MQTT: Hubungkan perangkat dengan otentikasi FC

Last Updated:Jun 22, 2026

Saat menghubungkan perangkat ke Platform IoT melalui gerbang MQTT, Anda dapat menggunakan sertifikat kustom untuk memverifikasi identitasnya dan mendaftarkannya berdasarkan Common Name (CN) dari sertifikat tersebut. Topik ini menjelaskan cara menghubungkan perangkat ke Platform IoT menggunakan verifikasi pihak ketiga dengan Alibaba Cloud Function Compute (FC).

Catatan penting

Langkah-langkah dalam topik ini dilakukan sebagai pengguna biasa. Jika suatu operasi memerlukan izin administratif, tambahkan awalan perintah dengan sudo.

Prasyarat

Anda telah membeli instans Edisi Perusahaan Eksklusif. Topik ini menggunakan contoh instans di wilayah China (Shanghai). Untuk informasi selengkapnya, lihat Beli instans Edisi Perusahaan.

Informasi latar belakang

Platform IoT menyediakan fitur gerbang MQTT yang memungkinkan perangkat terhubung dan berkomunikasi. Anda dapat memanfaatkan fitur seperti verifikasi pihak ketiga dengan Function Compute, sertifikat kustom, Online Certificate Status Protocol (OCSP), serta topik komunikasi kustom untuk otentikasi guna mendukung berbagai skenario bisnis.

Untuk informasi selengkapnya tentang otentikasi dan komunikasi perangkat melalui gerbang MQTT, lihat Ikhtisar gerbang MQTT.

Persiapan

Topik ini menggunakan Ubuntu 22.04 sebagai lingkungan pengembangan.

Langkah 1: Hasilkan sertifikat kustom

  1. Login ke sistem operasi Ubuntu.

  2. Jalankan perintah berikut untuk menghasilkan sertifikat root root-ca.crt untuk sisi perangkat dan sisi server:

    openssl req \
        -new \
        -newkey rsa:2048 \
        -days 365 \
        -nodes \
        -x509 \
        -subj "/C=CN/O=Aliyun IOT/CN=IoT CA" \
        -keyout root-ca.key \
        -out root-ca.crt
  3. Hasilkan sertifikat kustom sisi server berdasarkan sertifikat root root-ca.crt.

    1. Jalankan perintah berikut untuk menghasilkan file kunci sisi server server.key:

      openssl genrsa -out server.key 2048
    2. Jalankan perintah touch openssl.cnf untuk membuat file bernama openssl.cnf.

    3. Jalankan perintah vi openssl.cnf. Kemudian, tambahkan konten berikut ke file tersebut, tekan tombol Esc, lalu masukkan :wq untuk menyimpan dan keluar.

      [policy_match]
      countryName             = cn
      stateOrProvinceName     = optional
      organizationName        = optional
      organizationalUnitName  = optional
      commonName              = supplied
      emailAddress            = optional
      [req]
      default_bits       = 2048
      distinguished_name = req_distinguished_name
      req_extensions     = req_ext
      x509_extensions    = v3_req
      prompt             = no
      [req_distinguished_name]
      commonName          = Server
      [req_ext]
      subjectAltName = @alt_names
      [v3_req]
      subjectAltName = @alt_names
      [alt_names]
      DNS.1 = *.mqtt.iothub.aliyuncs.com
      DNS.2 = *.igw.iothub.aliyuncs.com
    4. Jalankan perintah berikut untuk menghasilkan file permintaan sisi server server.csr:

      openssl req -new -key server.key -config openssl.cnf -out server.csr
    5. Jalankan perintah berikut untuk menghasilkan file sertifikat sisi server server.crt:

      openssl x509 -req -days 365 -sha256 -in server.csr -CA root-ca.crt -CAkey root-ca.key -CAcreateserial -out server.crt -extensions v3_req -extfile openssl.cnf
    6. Jalankan perintah berikut untuk memverifikasi sertifikat sisi server:

      openssl verify -CAfile root-ca.crt server.crt
  4. Hasilkan sertifikat kustom sisi perangkat berdasarkan sertifikat root root-ca.crt.

    1. Jalankan perintah berikut untuk menghasilkan file kunci sisi perangkat client.key:

      openssl genrsa -out client.key 2048
    2. Jalankan perintah berikut untuk menghasilkan file permintaan sertifikat sisi perangkat client.csr. Atur CN menjadi Client_123.

      openssl req -new -key client.key -out client.csr -subj "/CN=Client_123"
    3. Jalankan perintah berikut untuk menghasilkan file sertifikat sisi perangkat client.crt:

      openssl x509 -req -days 365 -sha256 -in client.csr -CA root-ca.crt -CAkey root-ca.key -CAcreateserial -out client.crt
    4. Jalankan perintah berikut untuk memverifikasi sertifikat sisi perangkat:

      openssl verify -CAfile root-ca.crt client.crt

Langkah 2: Buat fungsi FC untuk otentikasi

  1. Login ke Konsol Function Compute. Di panel navigasi sebelah kiri, klik Services & Functions.

  2. Di bilah navigasi atas, pilih wilayah China (Shanghai). Pada halaman Services, klik Create Service.

  3. Di panel Create Service, masukkan Service Name, misalnya IoT_Service, lalu klik OK.

  4. Pada halaman Functions, klik Create Function.

  5. Pada halaman Create Function, konfigurasikan parameter berikut lalu klik Create.

    Pilih Create with Built-in Runtime sebagai metode pembuatan. Untuk Function Name, masukkan three_party_auth. Untuk Request Handler Type, pilih Event Handler. Untuk Runtime, pilih Python 3.6.

  6. Pada halaman Function Details, ganti kode contoh dengan kode berikut lalu klik Deploy Code.

    Fungsi otentikasi mengembalikan CN dari sertifikat perangkat sebagai deviceName.

    # -*- coding: utf-8 -*-
    import logging
    import json
    import time
    import enum
    import random
    import string
    class Request:
        def __init__(self, json_str):
            self.clientId = None
            self.username = None
            self.password = None
            self.certificateCommonName = None
            for key, value in json.loads(json_str).items():
                setattr(self, key, value)
    class Response:
        def __init__(self):
            self.deviceName = None
            self.result = 'true'
            self.message = 'success'
        def handler(self, request):
            # Kembalikan CN dari sertifikat perangkat sebagai deviceName.
            self.deviceName = request.certificateCommonName
            return json.dumps(self.__dict__)
    def handler(event, context):
        request = Request(event)
        return Response().handler(request)

Langkah 3: Buat gerbang

  1. Login ke Konsol Platform IoT. Di pojok kiri atas halaman, pilih wilayah China (Shanghai).

  2. Di halaman Instance Overview, klik instans Edisi Perusahaan Eksklusif yang dituju.

  3. Di panel navigasi sebelah kiri, pilih Device Management > Gateway, lalu klik Add Gateway.

  4. Konfigurasikan parameter berikut lalu klik OK.

    Untuk Server Certificate, gunakan konten dari server.crt. Untuk Server Certificate Private Key, gunakan konten dari server.key. Untuk Device Root Certificate, gunakan konten dari root-ca.crt. Untuk informasi selengkapnya tentang parameter tersebut, lihat Tambahkan gerbang.

    Untuk Protocol, pilih MQTT. Untuk Custom Port, masukkan 1883. Untuk Authentication Type, pilih Third-party Authentication. Untuk Enable Data Passthrough, pilih No. Untuk Enable Device X.509 Certificate Authentication, pilih No. Untuk Enable OCSP, pilih Disabled. Untuk Device Authentication FC Service, pilih IoT_Service. Untuk Device Authentication FC Function, pilih three_party_auth. Untuk Authorization, pilih AliyunIOTAccessingFCRole.

  5. Di daftar gerbang, salin dan simpan Gateway URL.

Langkah 4: Kembangkan program sisi perangkat

  1. Kembali ke sistem operasi Ubuntu.

  2. Jalankan perintah berikut untuk menginstal library yang diperlukan:

    sudo apt-get install build-essential gcc make cmake cmake-gui cmake-curses-gui
    sudo apt-get install libssl-dev
  3. Jalankan perintah berikut untuk menginstal library open source Paho MQTT:

    git clone https://github.com/eclipse/paho.mqtt.c.git
    mkdir build && cd build
    cmake ../paho.mqtt.c -DPAHO_WITH_SSL=TRUE -DCMAKE_INSTALL_PREFIX="/usr/lib"
    make -j
    sudo make install && cd ..
  4. Jalankan perintah touch aiot_mqtt_demo.c untuk membuat file simulator perangkat bernama aiot_mqtt_demo.c.

  5. Jalankan perintah vi aiot_mqtt_demo.c untuk membuka file tersebut dan tambahkan konten berikut:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include "MQTTClient.h"
    int msgarrvd(void *context, char *topicName, int topicLen, MQTTClient_message *message)
    {
        printf("message recv < topic [%s], payload [%s]\n", topicName, (char *)message->payload);
        MQTTClient_freeMessage(&message);
        MQTTClient_free(topicName);
        return 1;
    }
    int main(int argc, char* argv[])
    {
        MQTTClient client;
        MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;
        MQTTClient_SSLOptions ssl_opts = MQTTClient_SSLOptions_initializer;
        int rc;
        /* Buat klien MQTT. Ganti nilai placeholder. */
        const char *host = "ssl://iot-0****.igw.iothub.aliyuncs.com:1883";
        const char *client_id = "12345";
        MQTTClient_create(&client, host, client_id, MQTTCLIENT_PERSISTENCE_NONE, NULL);
        MQTTClient_setCallbacks(client, NULL, NULL, msgarrvd, NULL);
        /* Konfigurasikan parameter koneksi: sertifikat, username, dan password. Ganti nilai placeholder. */
        ssl_opts.trustStore = "root-ca.crt";
        ssl_opts.privateKey = "client.key";
        ssl_opts.keyStore = "client.crt";
        conn_opts.ssl = &ssl_opts;
        conn_opts.username = "sdk_test01";
        conn_opts.password = "hello123";
        /* Bangun koneksi MQTT. */
        if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS) {
            printf("Gagal terhubung, kode balasan %d\n", rc);
            exit(EXIT_FAILURE);
        }
        printf("berhasil terhubung username %s, password %s\n", conn_opts.username, conn_opts.password);
        /* Berlangganan ke topik. */
        MQTTClient_subscribe(client, "/user/aiot_mqtt_demo_downraw", 1);
        /* Hasilkan dan publikasikan pesan dalam loop. */
        MQTTClient_message pubmsg = MQTTClient_message_initializer;
        const char *topic = "/user/aiot_mqtt_demo_upraw";
        pubmsg.payload = "Hello Service!";
        pubmsg.payloadlen = (int)strlen(pubmsg.payload);
        pubmsg.qos = 1;
        for(int i = 0; i < 100; i++) {
            MQTTClient_publishMessage(client, topic, &pubmsg, NULL);
            printf("message send > topic [%s], payload [%s]\n", topic, (char *)pubmsg.payload);
            sleep(10);
        }
        /* Putuskan koneksi dan hapus klien. */
        MQTTClient_disconnect(client, 10000);
        MQTTClient_destroy(&client);
        return rc;
    }
  6. Dalam kode tersebut, modifikasi parameter sesuai informasi perangkat aktual Anda. Lalu, tekan tombol Esc dan masukkan :wq untuk menyimpan file aiot_mqtt_demo.c.

    Parameter

    Deskripsi

    host

    Titik akhir gerbang MQTT untuk koneksi perangkat. Formatnya adalah ssl://${Gateway-Endpoint}:${Port-Number}.

    ${Gateway-Endpoint} dan ${Port-Number} adalah nama domain dan port kustom dari Gateway URL yang Anda peroleh pada Langkah 3.

    client_id

    (Opsional) ID klien. ID harus berupa nilai kustom hingga 64 karakter. Gunakan alamat MAC atau nomor seri (SN) perangkat agar lebih mudah mengidentifikasi klien.

    ssl_opts.trustStore

    Jalur ke file sertifikat root sisi perangkat root-ca.crt.

    ssl_opts.privateKey

    Jalur ke file kunci sisi perangkat client.key.

    ssl_opts.keyStore

    Jalur ke file sertifikat sisi perangkat client.crt.

    conn_opts.username

    Username untuk koneksi MQTT.

    Username harus terdiri dari 4 hingga 32 karakter dan dapat berisi huruf, angka, tanda hubung (-), garis bawah (_), tanda at (@), titik (.), dan titik dua (:). Username harus unik dalam produk tersebut.

    conn_opts.password

    Password untuk koneksi MQTT.

    Password harus terdiri dari 1 hingga 32 karakter dan dapat berisi huruf, angka, tanda hubung (-), garis bawah (_), tanda at (@), titik (.), dan titik dua (:).

Setelah menyelesaikan langkah-langkah di atas, direktori Anda berisi file-file berikut:

build
paho.mqtt.c
aiot_mqtt_demo.c
client.crt
client.csr
client.key
openssl.cnf
root-ca.crt
root-ca.key
server.crt
server.csr
server.key

Langkah 5: Kompilasi dan jalankan

  1. Jalankan perintah berikut untuk mengompilasi dan menjalankan file program perangkat aiot_mqtt_demo.c:

    gcc -o aiot_mqtt_demo aiot_mqtt_demo.c -lpaho-mqtt3cs
    ./aiot_mqtt_demo

    Setelah program berhasil dijalankan, deviceName (Client_123) yang dikembalikan oleh fungsi otentikasi FC digunakan sebagai DeviceName untuk perangkat di Platform IoT. Perangkat bernama Client_123 secara otomatis dibuat di halaman Device Management > Devices instans Anda di Konsol Platform IoT. Status perangkat adalah Online.

  2. (Opsional) Untuk melihat data yang dilaporkan oleh perangkat, buka Konsol Platform IoT dan lihat halaman Monitoring and Operations > Device Log instans Anda. Buka Monitoring and Operations > Device Log lalu klik tab Cloud Runtime Log. Dari daftar drop-down Product, pilih produk gerbang. Di kolom Actions, klik View. Di kotak dialog View Details, pastikan Topik adalah /user/aiot_mqtt_demo_upraw dan kontennya adalah Hello Service!. Status 200 menegaskan bahwa pesan berhasil dilaporkan.