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.