10.11. HTTPS – enkripcija prijenosa za poslužitelj

Do sada je sve bilo običan HTTP na vratima 80. Svatko tko može presnimiti pakete između preglednika i kamere može pročitati lozinku iz obrasca za prijavu, kolačić sesije koji od njega dolazi natrag, JWT u zaglavlju Authorization i JPEG bajtove svake snimljene sličice. HTTPS šifrira liniju od kraja do kraja.

Sam tijek rada s certifikatima – generiranje samopotpisanog certifikata za razvoj, dobivanje CA-potpisanog certifikata za produkciju, kopiranje datoteka na kameru u ispravnom formatu – obrađen je u Rad s TLS certifikatima. Ova stranica govori o priključivanju već učitanog certifikata u microdot.

10.11.1. Izgradnja SSL konteksta

ssl.SSLContext je spremnik standardne biblioteke za certifikat, ključ i opcije protokola. Za poslužitelj želite PROTOCOL_TLS_SERVER i lanac certifikata učitan s datotečnog sustava kamere:

import ssl

ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ctx.load_cert_chain('/flash/cert.der', '/flash/key.der')

DER putanje dolaze iz tijeka rada koji ste pokrenuli u TLS odjeljku – samopotpisani za razvoj, CA-potpisani za produkciju. Datoteke ne moraju biti na /flash; /sdcard jednako dobro funkcionira.

10.11.2. Proslijedite kontekst u start_server

Jedina razlika u odnosu na raniji poziv start_server() jest argument ssl=ctx i broj vrata. Vrata 443 zadana su za HTTPS, što znači da preglednici ne moraju upisivati :443 – jednostavno https://yard-cam.local/ radi:

async def main():
    await asyncio.gather(
        capture_loop(),
        motion_detector(),
        app.start_server(host='0.0.0.0', port=443, ssl=ctx),
    )

asyncio.run(main())

To je sve za stranu poslužitelja. Svaka postojeća ruta – /status, /snapshot.jpg, /stream.jpg, /config, /events, /control, statička nadzorna ploča – sada se izvodi preko TLS-a bez ikakvih drugih izmjena koda.

10.11.4. Što ovdje nije obrađeno

HTTP Strict Transport Security (HSTS), automatsko obnavljanje certifikata, lanac povjerenja CA na strani kamere za odlazne zahtjeve te izbor skupova šifri – sve to nalazi se u TLS odjeljku. Priključak ovdje – jedan SSLContext, jedan ssl=ctx – jedini je dio specifičan za microdot.

Traka URL-a nadzorne ploče sada prelazi s http:// na https://, a WebSocket s ws:// na wss:// – JavaScript nadzorne ploče već je odabrao ispravnu shemu na temelju location.protocol, pa nikakve promjene na klijentu nisu potrebne.

Kamera poslužuje preko HTTPS-a. Obrazac za prijavu, JWT i snimljene sličice šifrirani su tijekom prijenosa.