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.