10.11. HTTPS – sunucu için taşıma şifrelemesi¶
Şimdiye kadar her şey 80 numaralı bağlantı noktasında düz HTTP üzerindeydi. Tarayıcı ile kamera arasında paket yakalama yapabilen herkes, oturum açma formunun parolasını, ondan geri gelen oturum çerezini, Authorization başlığındaki JWT’yi ve her yakalanan çerçevenin JPEG baytlarını okuyabilir. HTTPS, hattı baştan sona şifreler.
Sertifika iş akışının kendisi – geliştirme için kendinden imzalı bir sertifika oluşturmak, üretim için CA imzalı bir sertifika almak, dosyaları doğru formatta kameraya kopyalamak – TLS sertifikalarıyla çalışma belgesinde ele alınmıştır. Bu sayfa önceden yüklenmiş bir sertifikayı microdot’a takmakla ilgilidir.
10.11.1. SSL bağlamını oluşturma¶
ssl.SSLContext, standart kütüphanenin sertifika, anahtar ve protokol seçenekleri için kapsayıcısıdır. Bir sunucu için PROTOCOL_TLS_SERVER ve kameranın dosya sisteminden yüklenmiş bir sertifika zinciri istersiniz:
import ssl
ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ctx.load_cert_chain('/flash/cert.der', '/flash/key.der')
DER yolları, TLS bölümünde çalıştırdığınız hangi iş akışından gelirse oradan gelir – geliştirme için kendinden imzalı, üretim için CA imzalı. Dosyaların /flash üzerinde olması gerekmez; /sdcard da aynı şekilde çalışır.
10.11.2. Bağlamı start_server’a geçirme¶
Önceki start_server() çağrısından tek farkı ssl=ctx argümanı ve bağlantı noktası numarasıdır. 443 numaralı bağlantı noktası HTTPS varsayılanıdır; bu da tarayıcıların :443 yazmasına gerek olmadığı anlamına gelir – sadece https://yard-cam.local/ çalışır:
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())
Sunucu tarafı için bu kadar. Mevcut her rota – /status, /snapshot.jpg, /stream.jpg, /config, /events, /control, statik gösterge paneli – artık başka herhangi bir kod değişikliği olmadan TLS üzerinde çalışır.
10.11.4. Burada ele alınmayanlar¶
HTTP Strict Transport Security (HSTS), sertifika otomatik yenileme, dışa giden istekler için kamera tarafındaki CA güven zinciri ve şifre paketlerinin seçimi – bunların hepsi TLS bölümünde yer alır. Buradaki eklenti – bir SSLContext, bir ssl=ctx – microdot’a özgü tek parçadır.
Gösterge paneli URL çubuğu artık http:// yerine https://, WebSocket ise ws:// yerine wss:// olur – gösterge panelinin JavaScript’i zaten location.protocol temelinde doğru şemayı seçmişti, bu yüzden istemci tarafında herhangi bir değişiklik gerekmez.
Kamera HTTPS üzerinden hizmet verir. Oturum açma formu, JWT ve yakalanan çerçeveler aktarım sırasında şifrelenir.