Node-RED

Node-RED MQTT TLS: Broker Node'unu Güvenli Şekilde Yapılandırma

Node-RED'in mqtt-broker node'unu sertifika doğrulama, kimlik bilgileri ve MQTT 5 seçenekleriyle 8883 portunda şifreli bağlantı için yapılandırın; içe aktarılabilir bir flow ve en sık karşılaşacağınız hataların çözümleri dahil.

8883 portunda kilit simgeli şifreli bir bağlantı üzerinden MQTT broker'a bağlanan Node-RED flow'unu gösteren Node-RED MQTT TLS çizimi
Bunu kendi MQTT broker’ınızda çalıştırınFree planla özel, yönetilen bir MQTT broker alın ve hazır kod örnekleriyle başlayın.
Ücretsiz deneyin Kod örnekleri Kart gerekmez

Node-RED MQTT TLS yapılandırması birkaç dakika sürer; ancak kolayca gözden kaçan birkaç alan, bağlantınızın gerçekten güvenli mi yoksa yalnızca şifreli mi olduğunu belirler. Bu eğitim mqtt-broker config node'unu sertifika doğrulama, kimlik bilgileri ve MQTT 5 ile 8883 portu için yapılandırıyor, size içe aktarılabilir bir flow veriyor ve yol boyunca karşılaşabileceğiniz hataları açıklıyor.

Node-RED'de TLS Nasıl Çalışır?

Node-RED'in MQTT node'ları MQTT.js ve Node.js'in TLS yığını üzerine kuruludur. Üç parça devrededir:

  • mqtt-broker config node'u: sunucuyu, portu, client ID'yi, protokol sürümünü, kimlik bilgilerini ve bir "Use TLS" onay kutusunu tutar.
  • tls-config node'u: CA sertifikası, istemci sertifikası, sunucu adı ve sunucu sertifikasının doğrulanıp doğrulanmayacağı gibi TLS seçeneklerini tutan ayrı bir config node'udur.
  • mqtt in / mqtt out node'ları: broker node'una başvurur; kendi TLS ayarları yoktur.

Broker herkese açık güvenilen bir CA'dan alınmış bir sertifika kullandığında Node.js, birlikte gelen Mozilla kök listesi aracılığıyla ona zaten güvenir. ConnectMQ broker'ı bir Let's Encrypt sertifikası kullanır; bu yüzden herhangi bir CA dosyası yüklemenize gerek yoktur, yalnızca TLS'yi etkinleştirip doğrulamayı açık tutmanız yeterlidir.

Node-RED henüz kurulu değilse önce Node-RED kurulumu rehberimizi izleyin.

Port ve Protokol Seçenekleri

Seçenek Server alanı Port Ne zaman kullanılır
TLS üzerinden MQTT broker.connectmq.com 8883 Sunucularda, PC'lerde ve gateway'lerde Node-RED için varsayılan
Güvenli WebSocket wss://broker.connectmq.com:8084/mqtt 8084 8883'ü engelleyip HTTPS tarzı trafiğe izin veren ağlar
Düz MQTT broker.connectmq.com 1883 Yalnızca herkese açık broker'da yerel test

Adım Adım Node-RED MQTT TLS Yapılandırması

Adım 1: Broker Node'unu Oluşturun

Çalışma alanına bir mqtt in node'u sürükleyin ve üzerine çift tıklayın. Server alanının yanında Add new mqtt-broker seçeneğini seçin ve kalem simgesine tıklayın.

Connection sekmesinde:

  1. Server: broker.connectmq.com
  2. Port: 8883
  3. Connect automatically: işaretli
  4. Use TLS: işaretli
  5. Protocol: MQTT V5 (diğer istemcileriniz gerektiriyorsa V3.1.1)
  6. Client ID: broker portalında oluşturulan client ID (YOUR_CLIENT_ID). Özel bir broker için asla boş bırakmayın ve başka bir istemcide yeniden kullanmayın; aksi hâlde iki bağlantı birbirini sürekli koparır.
  7. Keep Alive: 60 saniye mantıklı bir varsayılandır.

Adım 2: TLS Yapılandırmasını Ekleyin

Use TLS kutusunu işaretlediğinizde bir TLS Configuration alanı görünür. Add new tls-config seçeneğini seçin ve kalem simgesine tıklayın:

  • Certificate / Private Key: boş bırakın. Bunlar istemci sertifikasıyla (mutual TLS) kimlik doğrulama içindir ve ConnectMQ bunu kullanmaz; kimlik doğrulamayı TLS üzerinden kullanıcı adı ve parolayla yapar.
  • CA Certificate: herkese açık güvenilen broker'lar için boş bırakın. CA dosyanızı yalnızca kendi CA'sı olan özel bir broker için yükleyin.
  • Verify server certificate: işaretli. Bu, sayfadaki en önemli kutudur.
  • Server Name: broker.connectmq.com. Node.js normalde SNI'yi server alanından türetir, ancak açıkça belirtmek sürprizleri önler.
  • Name: node'u diğer broker yapılandırmalarında yeniden kullanabilmek için Cloud broker TLS gibi açıklayıcı bir etiket.

Broker node'una dönmek için Add düğmesine tıklayın.

Adım 3: Kimlik Bilgilerini Girin

Broker node'unun Security sekmesinde portaldaki Username ve Password değerlerini girin. Node-RED bunları flow'dan ayrı olarak flows_cred.json dosyasında saklar ve flow'ları dışa aktardığınızda asla dahil edilmezler. Bu dosyanın otomatik oluşturulan bir anahtar yerine sizin kontrol ettiğiniz bir anahtarla şifrelenmesi için settings.js içinde credentialSecret ayarlayın; aksi hâlde projeyi başka bir makineye taşıdığınızda okunamayan kimlik bilgileriyle karşı karşıya kalabilirsiniz.

Adım 4: İsteğe Bağlı MQTT 5 Ayarları

MQTT V5 seçiliyken ek seçenekler görünür:

  • Broker node'undaki Session Expiry: bağlantı koptuktan sonra broker'ın subscription'larınızı ve kuyruktaki QoS 1/2 mesajlarınızı ne kadar süre tutacağı. Sabit bir client ID ve kapalı clean start ile birleştiğinde, yeniden başlatılan bir Node-RED örneğinin kaçırdığı mesajları almasını sağlar.
  • Messages sekmesi: birth, close ve will mesajları. Bir durum topic'inde {"status":"online"} gibi retained bir birth mesajı ve {"status":"offline"} will mesajı size basit bir sağlık göstergesi sunar.
  • mqtt in seçenekleri: retain handling, "no local" (kendi yayınlarınızı almama) ve "retain as published".
  • mqtt out seçenekleri: mesaj süresi (message expiry), content type, response topic, correlation data ve user properties.

MQTT 5 özellikleri genel bakışımız bunların her birini daha ayrıntılı açıklar.

Adım 5: Deploy Edin ve Doğrulayın

mqtt in node'unu factory/line1/# gibi bir topic'e yönlendirin, bir debug node'una bağlayın ve Deploy düğmesine tıklayın. Birkaç saniye içinde node durumu yeşil "connected" olarak değişmelidir. Süresiz olarak "connecting" veya "disconnected" gösteriyorsa aşağıdaki sorun giderme bölümüne geçin.

İçe Aktarılabilir Örnek Flow

Eksiksiz bir TLS kurulumunu tek adımda elde etmek için bu flow'u içe aktarın (menü, Import, yapıştır). Anonim erişimle TLS üzerinden herkese açık MQTT test broker'ını kullandığı için hemen çalışır. 8b2f yerine kendi rastgele karakterlerinizi yazın; özel bir broker için client ID'yi değiştirin ve Security sekmesine kimlik bilgilerini ekleyin.

[
  {
    "id": "f1e2d3c4b5a69701",
    "type": "tls-config",
    "name": "ConnectMQ TLS",
    "cert": "",
    "key": "",
    "ca": "",
    "certname": "",
    "keyname": "",
    "caname": "",
    "servername": "broker.connectmq.com",
    "verifyservercert": true,
    "alpnprotocol": ""
  },
  {
    "id": "f1e2d3c4b5a69702",
    "type": "mqtt-broker",
    "name": "ConnectMQ over TLS",
    "broker": "broker.connectmq.com",
    "port": "8883",
    "tls": "f1e2d3c4b5a69701",
    "clientid": "nodered-tls-8b2f",
    "autoConnect": true,
    "usetls": true,
    "protocolVersion": "5",
    "keepalive": "60",
    "cleansession": true,
    "autoUnsubscribe": true,
    "sessionExpiry": "",
    "birthTopic": "connectmq/demo/8b2f/nodered/status",
    "birthQos": "1",
    "birthRetain": "true",
    "birthPayload": "{\"status\":\"online\"}",
    "willTopic": "connectmq/demo/8b2f/nodered/status",
    "willQos": "1",
    "willRetain": "true",
    "willPayload": "{\"status\":\"offline\"}"
  },
  {
    "id": "f1e2d3c4b5a69703",
    "type": "inject",
    "name": "Every 10 s",
    "props": [{ "p": "payload" }],
    "repeat": "10",
    "once": true,
    "onceDelay": "2",
    "topic": "",
    "payload": "",
    "payloadType": "date",
    "x": 140,
    "y": 80,
    "wires": [["f1e2d3c4b5a69704"]]
  },
  {
    "id": "f1e2d3c4b5a69704",
    "type": "change",
    "name": "Build reading",
    "rules": [
      { "t": "set", "p": "payload", "pt": "msg", "to": "{\"ts\": payload, \"value\": $round($random() * 100, 1)}", "tot": "jsonata" },
      { "t": "set", "p": "topic", "pt": "msg", "to": "connectmq/demo/8b2f/nodered/reading", "tot": "str" }
    ],
    "x": 330,
    "y": 80,
    "wires": [["f1e2d3c4b5a69705"]]
  },
  {
    "id": "f1e2d3c4b5a69705",
    "type": "mqtt out",
    "name": "Publish over TLS",
    "topic": "",
    "qos": "1",
    "retain": "false",
    "broker": "f1e2d3c4b5a69702",
    "x": 540,
    "y": 80,
    "wires": []
  },
  {
    "id": "f1e2d3c4b5a69706",
    "type": "mqtt in",
    "name": "Subscribe over TLS",
    "topic": "connectmq/demo/8b2f/nodered/#",
    "qos": "1",
    "datatype": "auto-detect",
    "broker": "f1e2d3c4b5a69702",
    "nl": false,
    "rap": true,
    "rh": 0,
    "inputs": 0,
    "x": 160,
    "y": 160,
    "wires": [["f1e2d3c4b5a69707"]]
  },
  {
    "id": "f1e2d3c4b5a69707",
    "type": "debug",
    "name": "Show",
    "active": true,
    "tosidebar": true,
    "console": false,
    "complete": "true",
    "targetType": "full",
    "x": 370,
    "y": 160,
    "wires": []
  }
]

Deploy ettikten sonra debug kenar çubuğu, retained "online" durumunu ve her on saniyede bir yeni bir ölçümü gösterir; hepsi TLS üzerinden iletilir. Herkese açık alan herkes tarafından görülebilir, bu yüzden onu yalnızca test verileri için kullanın.

Bunun Yerine Güvenli WebSocket Kullanmak

Ağınız 8883 portunu engelliyorsa Server alanına tam bir URL yazın: wss://broker.connectmq.com:8084/mqtt. Node-RED bu durumda port alanını yok sayar ve 8084 üzerinden güvenli WebSocket ile bağlanır; TLS aynı sertifika doğrulamasıyla yönetilir. Bu durum kurumsal ağlarda yaygındır; arka plan bilgisi için WebSocket üzerinden MQTT yazısına bakın.

Node-RED MQTT TLS Sorunlarını Gidermek

  1. "connecting" durumunda takılı kalıyor: 8883 portu büyük olasılıkla engellenmiştir. Node-RED sunucusundan openssl s_client -connect broker.connectmq.com:8883 -servername broker.connectmq.com ile test edin ve 8084 üzerinden WSS deneyin.
  2. Log'da "unable to get local issuer certificate": Node.js zinciri oluşturamıyor. Genellikle ağdaki TLS denetiminden (TLS inspection) veya varsayılanları yanlış kök sertifikayla değiştiren yüklenmiş bir CA dosyasından kaynaklanır. Herkese açık güvenilen broker'lar için CA dosyasını kaldırın.
  3. "Hostname/IP does not match certificate's altnames": bir IP adresi veya takma ad girdiniz. Hostname'i kullanın.
  4. "Connection refused: Not authorized" veya bağlandıktan sonra bir reason code: TLS çalışıyor; kimlik bilgileri veya client ID hatalı. Bunları portaldan yeniden kopyalayın.
  5. Bağlanıyor, sonra birkaç saniyede bir kopuyor: başka bir istemci aynı client ID'yi kullanıyor; çoğu zaman ikinci bir Node-RED örneği veya unutulmuş bir test betiği.
  6. Port 8883 iken "Use TLS" işaretsiz: broker 8883'te bir TLS handshake beklediği için bağlantı askıda kalır veya düşer; bu yüzden "Use TLS" işaretli olmalıdır.

Node-RED MQTT bağlanmıyor rehberi ve MQTT TLS handshake hatalarını düzeltme yazısı daha fazla durumu ele alır. Bir hatayı ortadan kaldırmak için Verify server certificate kutusunun işaretini asla kaldırmayın; bu gerçek nedeni gizler ve sahte broker'lara karşı korumayı ortadan kaldırır.

Node-RED Kurulumunuzun Geri Kalanını Sağlamlaştırmak

Şifreli bir broker bağlantısı yalnızca bir katmandır. Ayrıca editörü adminAuth ile koruyun, HTTPS üzerinden sunun, Node-RED'i ve node'larını güncel tutun ve credentialSecret ayarlayın. Node-RED'i güvenceye alma rehberimiz her adımı ele alır; Node-RED MQTT eğitimi ise daha büyük flow'lar için topic'leri ve payload'ları nasıl yapılandıracağınızı gösterir.

Node-RED Flow'larınızı ConnectMQ'da Çalıştırın

Node-RED bir MQTT istemcisidir; bu yüzden diğer uçta güvenilir bir broker'a ihtiyaç duyar. ConnectMQ gibi tam yönetilen bir MQTT hizmeti, 8883'te TLS, 8084'te güvenli WebSocket, otomatik yenilenen bir sertifika ve flow'larınızın ne publish ettiğini kontrol etmek için canlı topic gezgini ve pano içeren bir portal sunar. app.connectmq.com adresinden kaydolun, kredi kartı gerektirmeyen ücretsiz Serverless planını seçin, bir broker oluşturun ve oluşturulan kullanıcı adı, parola ve client ID'yi broker node'una yapıştırın. Önce barındırma modellerini karşılaştırmak için bulut MQTT broker rehberimizi okuyun.

Sık Sorulan Sorular

ConnectMQ için Node-RED'e CA sertifikası yüklemem gerekir mi?

Hayır. Sertifikası, Node.js'in zaten güvendiği Let's Encrypt tarafından verilmiştir. TLS'yi etkinleştirin, "Verify server certificate" kutusunu işaretli tutun ve CA alanını boş bırakın.

Bir flow'u dışa aktardığımda MQTT kimlik bilgilerim de dahil edilir mi?

Hayır. Node-RED kimlik bilgilerini ayrı olarak flows_cred.json dosyasında saklar ve dışa aktarımlardan hariç tutar; bu yüzden başka bir örneğe içe aktardıktan sonra bunları yeniden girmeniz gerekir.

Birden fazla Node-RED örneği tek bir broker yapılandırmasını paylaşabilir mi?

Aynı ayarları paylaşabilirler, ancak her örneğin kendine özgü bir client ID'ye ihtiyacı vardır. Aynı ID'ye sahip iki istemci birbirini sürekli koparır.

Broker node'unda MQTT V5 mi yoksa V3.1.1 mi seçmeliyim?

Sisteminizin başka bir parçası 3.1.1 gerektirmedikçe V5'i seçin. V5; session expiry, message expiry, user properties ve daha anlaşılır reason code'lar ekler. ConnectMQ her iki sürümü de destekler.

İlgili yazılar

ISA-95 Topic'leriyle Node-RED OPC UA İstemcisinden MQTT'ye

Bir PLC veya simülasyon sunucusundaki OPC UA değişkenlerine node-red-contrib-opcua ile abone olun, node ID'lerini ISA-95 tarzı MQTT topic'lerine eşleyin ve değerleri kalite bilgisi ve zaman damgalarıyla yayınlayın.

8 dk okuma

Tüm yazılar →

Özel MQTT broker’ınız birkaç tık uzağınızda

Hesabınızı oluşturun, broker kimlik bilgilerinizi alın ve ilk cihazınızı bağlayın — kurulacak, yamalanacak ya da ölçeklendirilecek sunucu yok.