10.11. HTTPS – átviteli titkosítás a szerverhez

Eddig minden egyszerű HTTP volt a 80-as porton. Bárki, aki csomagrögzítést végez a böngésző és a kamera között, el tudja olvasni a bejelentkezési űrlap jelszavát, a belőle visszatérő munkamenet-sütit, az Authorization fejlécben lévő JWT-t és minden rögzített képkocka JPEG-bájtjait. A HTTPS végponttól végpontig titkosítja a vezetéket.

Maga a tanúsítvány-munkafolyamat – önaláírt tanúsítvány generálása fejlesztéshez, CA által aláírt tanúsítvány beszerzése éles használathoz, a fájlok megfelelő formátumban a kamerára másolása – a TLS tanúsítványok kezelése oldalon szerepel. Ez az oldal arról szól, hogy egy már betöltött tanúsítványt hogyan illesztünk be a microdotba.

10.11.1. Az SSL-kontextus felépítése

Az ssl.SSLContext a standard könyvtár tárolója a tanúsítványhoz, a kulcshoz és a protokoll-beállításokhoz. Szerverhez a PROTOCOL_TLS_SERVER opció és a kamera fájlrendszeréből betöltött tanúsítványlánc kell:

import ssl

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

A DER-útvonalak abból a munkafolyamatból származnak, amelyet a TLS szakaszban futtattál – önaláírt fejlesztéshez, CA által aláírt éles használathoz. A fájloknak nem kell a /flash helyen lenniük; az /sdcard ugyanúgy működik.

10.11.2. Add át a kontextust a start_server metódusnak

Az egyetlen különbség a korábbi start_server() hívástól az ssl=ctx argumentum és a portszám. A 443-as port a HTTPS alapértelmezése, ami azt jelenti, hogy a böngészőknek nem kell beírniuk a :443 portot – elég a https://yard-cam.local/ cím:

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

Ennyi a szerveroldalt illetően. Minden meglévő útvonal – /status, /snapshot.jpg, /stream.jpg, /config, /events, /control, a statikus irányítópult – mostantól TLS felett fut, bármilyen egyéb kódváltoztatás nélkül.

10.11.4. Ami itt nincs tárgyalva

A HTTP Strict Transport Security (HSTS), a tanúsítvány automatikus megújítása, a CA megbízhatósági lánc a kamera oldalán a kimenő kérésekhez, valamint a titkosítási csomagok kiválasztása mind a TLS szakaszban szerepel. Az itteni beillesztés – egy SSLContext, egy ssl=ctx – az egyetlen rész, amely kifejezetten a microdotra jellemző.

Az irányítópult URL-sávja most http:// helyett https:// címre vált, a WebSocket pedig ws:// helyett wss:// címre – az irányítópult JavaScript-je már a location.protocol alapján választotta ki a megfelelő sémát, így nincs szükség klienskódbeli változtatásra.

A kamera HTTPS felett szolgál ki. A bejelentkezési űrlap, a JWT és a rögzített képkockák titkosítva vannak az átvitel során.