10.11. HTTPS – transportversleuteling voor de server

Tot nu toe was alles gewoon HTTP op poort 80. Iedereen met een packet capture tussen de browser en de cam kan het wachtwoord van het inlogformulier lezen, de sessiecookie die ervan terugkomt, de JWT in de Authorization header en de JPEG-bytes van elk vastgelegd frame. HTTPS versleutelt de verbinding van begin tot eind.

De certificaat-workflow zelf – het genereren van een zelfondertekend certificaat voor ontwikkeling, het verkrijgen van een door een CA ondertekend certificaat voor productie, het in het juiste formaat naar de cam kopiëren van de bestanden – wordt behandeld in Werken met TLS-certificaten. Deze pagina gaat over het aansluiten van een reeds geladen certificaat op microdot.

10.11.1. De SSL-context opbouwen

ssl.SSLContext is de container van de standaardbibliotheek voor certificaat, sleutel en protocolopties. Voor een server wil je PROTOCOL_TLS_SERVER en een certificaatketen geladen vanaf het bestandssysteem van de cam:

import ssl

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

De DER-paden komen van welke workflow je ook hebt uitgevoerd in de TLS-sectie – zelfondertekend voor ontwikkeling, door een CA ondertekend voor productie. De bestanden hoeven niet op /flash te staan; /sdcard werkt net zo goed.

10.11.2. Geef de context door aan start_server

Het enige verschil met de eerdere start_server() aanroep is het ssl=ctx argument en het poortnummer. Poort 443 is de HTTPS-standaard, wat betekent dat browsers :443 niet hoeven in te typen – gewoon https://yard-cam.local/ werkt:

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())

Dat is alles voor de serverkant. Elke bestaande route – /status, /snapshot.jpg, /stream.jpg, /config, /events, /control, het statische dashboard – draait nu over TLS zonder enige andere codewijziging.

10.11.4. Wat hier niet wordt behandeld

HTTP Strict Transport Security (HSTS), automatische vernieuwing van certificaten, de CA-vertrouwensketen aan de cam-kant voor uitgaande verzoeken, en de keuze van cipher suites zitten allemaal in de TLS-sectie. De plug-in hier – één SSLContext, één ssl=ctx – is het enige onderdeel dat specifiek is voor microdot.

De URL-balk van het dashboard gaat nu van http:// naar https:// en de WebSocket van ws:// naar wss:// – de JavaScript van het dashboard koos al het juiste schema op basis van location.protocol, dus er zijn geen clientwijzigingen nodig.

De cam serveert over HTTPS. Het inlogformulier, de JWT en de vastgelegde frames worden tijdens het transport versleuteld.