10.11. HTTPS – criptarea transportului pentru server#
Până acum totul a fost HTTP simplu pe portul 80. Oricine are o captură de pachete între browser și cameră poate citi parola din formularul de autentificare, cookie-ul de sesiune care vine de la acesta, JWT-ul din antetul Authorization și octeții JPEG ai fiecărui cadru captat. HTTPS criptează firul de la cap la coadă.
Fluxul de lucru pentru certificate în sine – generarea unui certificat auto-semnat pentru dezvoltare, obținerea unui certificat semnat de o CA pentru producție, copierea fișierelor pe cameră în formatul corect – este tratat în Lucrul cu certificate TLS. Această pagină este despre conectarea unui certificat deja încărcat în microdot.
10.11.1. Construirea contextului SSL#
ssl.SSLContext este containerul bibliotecii standard pentru certificat, cheie și opțiuni de protocol. Pentru un server vrei PROTOCOL_TLS_SERVER și un lanț de certificate încărcat din sistemul de fișiere al camerei:
import ssl
ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ctx.load_cert_chain('/flash/cert.der', '/flash/key.der')
Căile DER provin din oricare flux de lucru pe care l-ai rulat în secțiunea TLS – auto-semnat pentru dezvoltare, semnat de CA pentru producție. Fișierele nu trebuie să fie pe /flash; /sdcard funcționează la fel de bine.
10.11.2. Transmite contextul către start_server#
Singura diferență față de apelul anterior start_server() este argumentul ssl=ctx și numărul portului. Portul 443 este implicit pentru HTTPS, ceea ce înseamnă că browserele nu trebuie să tasteze :443 – doar https://yard-cam.local/ funcționează:
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())
Asta e tot pentru partea de server. Fiecare rută existentă – /status, /snapshot.jpg, /stream.jpg, /config, /events, /control, dashboardul static – rulează acum prin TLS fără nicio altă modificare de cod.
10.11.4. Ce nu este tratat aici#
HTTP Strict Transport Security (HSTS), reînnoirea automată a certificatelor, lanțul de încredere al CA pe partea camerei pentru cererile de ieșire și alegerea suitelor de cifrare se află toate în secțiunea TLS. Plug-in-ul de aici – un SSLContext, un ssl=ctx – este singura piesă specifică pentru microdot.
Bara de URL a dashboardului trece acum de la http:// la https://, iar WebSocket-ul de la ws:// la wss:// – JavaScriptul dashboardului a ales deja schema corectă pe baza location.protocol, așa că nu sunt necesare modificări la client.
Camera servește prin HTTPS. Formularul de autentificare, JWT-ul și cadrele captate sunt criptate în tranzit.