10.11. HTTPS – crittografia del trasporto per il server¶
Finora tutto è stato HTTP in chiaro sulla porta 80. Chiunque disponga di una cattura di pacchetti tra il browser e la cam può leggere la password del modulo di login, il cookie di sessione che ne ritorna, il JWT nell’header Authorization e i byte JPEG di ogni frame catturato. HTTPS cifra il canale dall’inizio alla fine.
Il workflow del certificato in sé – generare un certificato autofirmato per lo sviluppo, ottenere un certificato firmato da una CA per la produzione, copiare i file sulla cam nel formato corretto – è trattato in Lavorare con i certificati TLS. Questa pagina riguarda l’innesto di un certificato già caricato in microdot.
10.11.1. Costruire il contesto SSL¶
ssl.SSLContext è il contenitore della libreria standard per certificato, chiave e opzioni di protocollo. Per un server vuoi PROTOCOL_TLS_SERVER e una catena di certificati caricata dal filesystem della cam:
import ssl
ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ctx.load_cert_chain('/flash/cert.der', '/flash/key.der')
I percorsi DER provengono da qualunque workflow tu abbia eseguito nella sezione TLS – autofirmato per lo sviluppo, firmato dalla CA per la produzione. I file non devono per forza stare su /flash; /sdcard funziona altrettanto bene.
10.11.2. Passare il contesto a start_server¶
L’unica differenza rispetto alla precedente chiamata a start_server() è l’argomento ssl=ctx e il numero di porta. La porta 443 è quella predefinita per HTTPS, il che significa che i browser non devono digitare :443 – basta https://yard-cam.local/:
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())
Per il lato server è tutto. Ogni route esistente – /status, /snapshot.jpg, /stream.jpg, /config, /events, /control, la dashboard statica – ora gira su TLS senza altre modifiche al codice.
10.11.4. Cosa non viene trattato qui¶
HTTP Strict Transport Security (HSTS), il rinnovo automatico dei certificati, la catena di fiducia della CA sul lato cam per le richieste in uscita e la scelta delle cipher suite vivono tutti nella sezione TLS. L’innesto descritto qui – un solo SSLContext, un solo ssl=ctx – è l’unica parte specifica di microdot.
La barra degli URL della dashboard passa ora da http:// a https:// e il WebSocket da ws:// a wss:// – il JavaScript della dashboard sceglieva già lo schema corretto in base a location.protocol, quindi non servono modifiche lato client.
La cam serve su HTTPS. Il modulo di login, il JWT e i frame catturati sono cifrati durante il transito.