Přeskočit na hlavní obsah

Basics Station a mTLS

Tento návod nastavuje server ChirpStack v4 pro brány, které se připojují protokolem LoRa Basics Station (LNS) místo protokolu UDP (packet forwarder), a to ve třech úrovních zabezpečení. Pro produkční provoz použijte mTLS: každá brána se prokazuje vlastním certifikátem. Nastavení brány je popsané zvlášť; pro EMBER viz EMBER: Basics Station a mTLS.

VariantaSpojeníKdo se prokazuje
wsWebSocket bez šifrovánínikdo; vhodné jen pro uzavřenou síť
wssWebSocket přes TLS (šifrovaný)server předkládá svůj certifikát, EMBER ho ale nekontroluje (viz Známá omezení)
mTLSTLS + klientský certifikát bránybrána svým certifikátem: server přijme jen bránu s platným certifikátem (EMBER server ani tak nekontroluje, viz Známá omezení)

Postup byl ověřen se serverem ChirpStack 4.19 a ChirpStack Gateway Bridge 4.1 proti zařízení EMBER s RouterOS 7.24.5: bezdrátová aktivace (OTAA), uplinky a downlinky se senzorem HARDWARIO STICKER a všechny případy, kdy musí mTLS bránu odmítnout.

Užitečná dokumentace​

Jak to funguje​

Zařízení EMBER drží jedno trvalé spojení (WebSocket) s Gateway Bridge. Tečou jím uplinky i downlinky a právě toto spojení se zabezpečuje.

Při připojení se zařízení EMBER nejdřív zeptá, kam se připojit (router-info), a bridge odpoví adresou s EUI brány. EMBER se pak připojí na tuto adresu a bridge mu pošle frekvenční plán (router_config). Od té chvíle bridge předává pakety přes MQTT pod tématem eu868/gateway/<eui>/… a server ChirpStack odpovídá stejnou cestou zpět.

mTLS (vzájemné TLS): brána se serveru prokazuje vlastním certifikátem (EMBER sám server nekontroluje, viz Známá omezení). ChirpStack slouží jako certifikační autorita (CA), která certifikáty bran vydává. Bridge při každém připojení kontroluje, že brána certifikát poslala, že ho podepsala tato CA, že je platný a že jeho jméno (CN) je EUI připojující se brány. Když kterákoli kontrola selže, bridge spojení odmítne.

Předpoklady​

OblastPožadavek
ChirpStackv4 (ověřeno 4.19) s regionem EU868
Gateway BridgeChirpStack Gateway Bridge v4 (ověřeno 4.1) jako druhá instance s backendem basic_station
Síťzařízení EMBER musí mít přístup k serveru na portu TCP 3001 (nebo jiném zvoleném)
Certifikáty (wss, mTLS)certifikační autorita (CA) a certifikát serveru vydaný na DNS jméno nebo IP adresu, na kterou se brány EMBER připojují
Čassprávný čas na serveru (NTP): bridge podle něj kontroluje platnost certifikátů; NTP doporučujeme i na zařízení EMBER (čas v logu)

1) Gateway Bridge s backendem basic_station​

Spusťte druhou instanci ChirpStack Gateway Bridge s backendem basic_station (v chirpstack-docker je to služba chirpstack-gateway-bridge-basicstation). Stávající bridge pro UDP může běžet dál vedle ní.

Varianty se liší jen v klíčích tls_cert, tls_key a ca_cert sekce [backend.basic_station]. Použijte blok pro svou variantu:

ws (bez TLS):

[backend]
type="basic_station"

[backend.basic_station]
bind=":3001"
tls_cert=""
tls_key=""
ca_cert=""
region="EU868"
frequency_min=863000000
frequency_max=870000000

wss (certifikát serveru):

[backend]
type="basic_station"

[backend.basic_station]
bind=":3001"
tls_cert="/etc/chirpstack-gateway-bridge/certs/server.crt"
tls_key="/etc/chirpstack-gateway-bridge/certs/server.key"
ca_cert=""
region="EU868"
frequency_min=863000000
frequency_max=870000000

mTLS (certifikát serveru + CA bran):

[backend]
type="basic_station"

[backend.basic_station]
bind=":3001"
tls_cert="/etc/chirpstack-gateway-bridge/certs/server.crt"
tls_key="/etc/chirpstack-gateway-bridge/certs/server.key"
ca_cert="/etc/chirpstack-gateway-bridge/certs/gateway-ca.crt"
region="EU868"
frequency_min=863000000
frequency_max=870000000

Frekvenční plán ([[backend.basic_station.concentrators]]) převezměte ze souboru chirpstack-gateway-bridge-basicstation-eu868.toml v chirpstack-docker (configuration/chirpstack-gateway-bridge/). Témata MQTT musí souhlasit s regionem na serveru ChirpStack:

[integration.mqtt]
event_topic_template="eu868/gateway/{{ .GatewayID }}/event/{{ .EventType }}"
state_topic_template="eu868/gateway/{{ .GatewayID }}/state/{{ .StateType }}"
command_topic_template="eu868/gateway/{{ .GatewayID }}/command/#"
  • Certifikát serveru (tls_cert) musí v SAN obsahovat DNS jméno nebo IP adresu, kterou brány EMBER používají. Nejjednodušší je podepsat ho stejnou CA jako certifikáty bran (krok 2).
  • S vyplněným ca_cert bridge vyžaduje klientský certifikát podepsaný touto CA, jehož jméno (CN) je přesně EUI brány.
  • Port 3001 otevřete ve firewallu pro síť, ze které se brány EMBER připojují.
  • Bridge restartujte v klidné době: každý restart znamená znovupřipojení všech bran (viz Známá omezení).
varování

Bridge, ke kterému se brány EMBER připojují, musí mít region="EU868". Zařízení EMBER přijme i frekvenční plán mimo své pásmo (ověřeno s US915); pak vypadá online, nic nepřijímá a jeho služba LoRa zůstane nestabilní až do restartu zařízení. Viz Špatný region ze serveru.


2) ChirpStack: CA pro certifikáty bran (jen mTLS)​

Aby server ChirpStack uměl vydávat certifikáty bran, potřebuje certifikační autoritu (CA). Do chirpstack.toml přidejte sekci [gateway] (chirpstack-docker ji ve výchozím stavu nemá) a ChirpStack restartujte:

[gateway]
ca_cert="/etc/chirpstack/certs/gateway-ca.crt" # CA certificate (PEM)
ca_key="/etc/chirpstack/certs/gateway-ca.key" # CA private key (PKCS#8)
client_cert_lifetime="365days" # lifetime of the issued certificates
allow_unknown_gateways=false
  • Stejný soubor gateway-ca.crt patří do ca_cert na Gateway Bridge (krok 1).
  • Klíč CA je nejcennější tajemství celého řešení: kdo ho má, může vydat certifikát pro libovolnou bránu. Uložte ho jen na server ChirpStack s omezenými přístupovými právy.
  • client_cert_lifetime volte vědomě (např. 365 dní): ChirpStack neumí certifikát zneplatnit, takže platnost je jediná hranice pro uniklý klíč. Dlouhá platnost zase znamená méně obnov.
  • S allow_unknown_gateways=false server ChirpStack zahazuje data bran, které v něm nejsou zaregistrované.

3) Zaregistrujte bránu v aplikaci ChirpStack​

ChirpStack bránu pozná podle jejího EUI; bez registrace její data zahazuje.

  1. Na zařízení EMBER zjistěte gateway ID: /iot lora print detail → gateway-id (16 hexadecimálních znaků, např. F41E57FFFFF67857).
  2. V aplikaci ChirpStack otevřete Tenant → Gateways → Add gateway a jako Gateway ID zadejte toto EUI (podrobnosti v návodu Brány).

Jakmile je brána připojená, její Dashboard v aplikaci ChirpStack ukazuje Last seen a region (eu868):

Dashboard brány v aplikaci ChirpStack s regionem eu868


4) Certifikát brány (jen mTLS)​

Klientský certifikát vydá ChirpStack jedním kliknutím. Jeho jméno (CN) je EUI brány a podepisuje ho CA z kroku 2.

  1. V aplikaci ChirpStack otevřete bránu → záložka TLS certificate → Generate certificate.
  2. Uložte si tři texty jako soubory: TLS certificate → tc.crt, TLS key → tc.key, CA certificate → ca.crt.
  3. Klíč se zobrazí jen jednou a ChirpStack si ho neukládá. Neposílejte ho e-mailem ani chatem a po nahrání do zařízení EMBER ho smažte.
  4. Poznamenejte si datum vypršení certifikátu: ChirpStack ho ukáže jen teď.

Záložka TLS certificate u brány v aplikaci ChirpStack:

Záložka TLS certificate u brány v aplikaci ChirpStack

SouborCo to jeTajné?
ca.crtCA, která podepisuje certifikáty bran. Do zařízení EMBER se importuje jako důvěryhodná CA serveru (server-ca), což je správně jen tehdy, když stejná CA podepsala i certifikát serveru (doporučeno v kroku 1; RouterOS 7.24.5 to stejně nekontroluje, viz Známá omezení). Pokud certifikát serveru pochází z jiné CA, importujte místo ca.crt tuto CAne
tc.crtcertifikát brányne
tc.keyprivátní klíč brány (ECDSA P-256, PKCS#8)ano

Známá omezení​

Tato omezení platí pro ChirpStack 4.19 / Gateway Bridge 4.1; po aktualizacích je znovu ověřte.

  • Restart serveru (Gateway Bridge) znamená znovupřipojení všech bran; každá je přitom asi 15 sekund offline. Restartujte v klidné době a potom zkontrolujte, že jsou všechny brány zpět online.
  • Certifikát nejde zneplatnit. Starý certifikát platí až do vypršení, i po obnově. Ani smazání brány v aplikaci ChirpStack spojení nezastaví. Při úniku klíče brány je jistá cesta jen výměna CA.
  • Hlídejte stav „online, ale bez uplinků“. Stav online v aplikaci ChirpStack znamená jen to, že chodí statistiky brány.
  • Správný čas (NTP) na serveru je nutný: bridge podle něj kontroluje platnost certifikátů. NTP nechte zapnuté i na zařízení EMBER, kvůli času v logu.

Řešení problémů podle logu​

Najděte řádek v logu Gateway Bridge nebo serveru ChirpStack a vyhledejte ho v tabulce. Skutečný důvod odmítnutí TLS je vždy v logu bridge.

KdeŘádek v logu (výňatek)Co znamenáCo udělat
bridgerouter-info … router_uri= (prázdné)jméno certifikátu ≠ EUI bránycertifikát pro tuto bránu
bridgeclient didn't provide a certificateEMBER se připojil bez certifikátucertificate= u záznamu serveru, příznak K
bridgecertificate signed by unknown authoritycertifikát z cizí CAvydejte certifikát na tomto serveru ChirpStack
bridgecertificate has expired or is not yet validcertifikát vypršel nebo nesedí čas serveruobnova certifikátu, NTP na serveru
bridgeinvalid signature by the client certificateklíč nepatří k certifikátu (chyba při obnově)nový certifikát, viz Obnova certifikátu brány
bridgeclient sent an HTTP request to an HTTPS serverEMBER má ssl=no, bridge používá TLSssl=yes
bridgeconnection with same gateway id already existsznovupřipojení před uzavřením starého spojenípočkejte až 65 s
ChirpStackObject does not exist u bránybrána není zaregistrovanápřidejte bránu (krok 3)
ChirpStackod brány nic nepřichází, bridge hlásí connectednesedí témata MQTTtémata eu868/… podle regionu

Řádky z logu brány vysvětluje stránka brány, pro EMBER EMBER: Řešení problémů podle logu.


Další krok: nastavení brány​

Když je server připravený, nastavte bránu: pro EMBER postupujte podle návodu EMBER: Basics Station a mTLS (příkazy RouterOS pro ws, wss a mTLS, ověření a obnova certifikátu).