10.11. HTTPS – siirtotien salaus palvelimelle¶
Tähän asti kaikki on ollut tavallista HTTP:tä portissa 80. Kuka tahansa, joka kaappaa paketteja selaimen ja kameran väliltä, voi lukea kirjautumislomakkeen salasanan, siltä palaavan istuntoevästeen, Authorization-otsakkeen JWT:n ja jokaisen kaapatun kehyksen JPEG-tavut. HTTPS salaa siirtotien päästä päähän.
Itse varmenneprosessi – itse allekirjoitetun varmenteen luominen kehitystä varten, CA:n allekirjoittaman varmenteen hankkiminen tuotantoon, tiedostojen kopioiminen kameraan oikeassa muodossa – käsitellään kohdassa TLS-varmenteiden kanssa työskentely. Tämä sivu käsittelee jo ladatun varmenteen kytkemistä microdotiin.
10.11.1. SSL-kontekstin rakentaminen¶
ssl.SSLContext on standardikirjaston säiliö varmenteelle, avaimelle ja protokollavalinnoille. Palvelinta varten haluat PROTOCOL_TLS_SERVER-arvon ja kameran tiedostojärjestelmästä ladatun varmenneketjun:
import ssl
ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ctx.load_cert_chain('/flash/cert.der', '/flash/key.der')
DER-polut tulevat siitä prosessista, jonka ajoit TLS-osiossa – itse allekirjoitettu kehitystä varten, CA:n allekirjoittama tuotantoon. Tiedostojen ei tarvitse olla /flash-polussa; /sdcard toimii yhtä hyvin.
10.11.2. Välitä konteksti start_server-kutsulle¶
Ainoa ero aiempaan start_server()-kutsuun on ssl=ctx-argumentti ja porttinumero. Portti 443 on HTTPS:n oletus, mikä tarkoittaa, että selainten ei tarvitse kirjoittaa :443 – pelkkä https://yard-cam.local/ toimii:
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())
Siinä kaikki palvelimen osalta. Jokainen olemassa oleva reitti – /status, /snapshot.jpg, /stream.jpg, /config, /events, /control ja staattinen koontinäyttö – toimii nyt TLS:n yli ilman muita koodimuutoksia.
10.11.4. Mitä tässä ei käsitellä¶
HTTP Strict Transport Security (HSTS), varmenteen automaattinen uusiminen, CA:n luottamusketju kameran puolella ulospäin lähteville pyynnöille ja salausmenetelmien valinta kuuluvat kaikki TLS-osioon. Tässä esitelty liitäntä – yksi SSLContext, yksi ssl=ctx – on ainoa osa, joka on nimenomaan microdotille ominainen.
Koontinäytön URL-palkki vaihtuu nyt muodosta http:// muotoon https:// ja WebSocket muodosta ws:// muotoon wss:// – koontinäytön JavaScript valitsi jo oikean skeeman location.protocol-arvon perusteella, joten asiakaspuolen muutoksia ei tarvita.
Kamera palvelee HTTPS:n yli. Kirjautumislomake, JWT ja kaapatut kehykset ovat salattuja siirron aikana.