10.11. HTTPS -- enkripsi transport untuk server¶
Sampai sekarang semuanya menggunakan HTTP biasa di port 80. Siapa saja yang menangkap paket antara browser dan kamera dapat membaca kata sandi formulir login, cookie sesi yang dikirim kembali, JWT di header Authorization, dan byte JPEG dari setiap bingkai yang diambil. HTTPS mengenkripsi koneksi dari ujung ke ujung.
Alur kerja sertifikat itu sendiri -- membuat sertifikat yang ditandatangani sendiri untuk pengembangan, mendapatkan sertifikat yang ditandatangani CA untuk produksi, menyalin file ke kamera dalam format yang benar -- tercakup dalam Bekerja dengan sertifikat TLS. Halaman ini membahas cara menghubungkan sertifikat yang sudah dimuat ke microdot.
10.11.1. Membangun konteks SSL¶
ssl.SSLContext adalah wadah pustaka standar untuk sertifikat, kunci, dan opsi protokol. Untuk server Anda memerlukan PROTOCOL_TLS_SERVER dan rantai sertifikat yang dimuat dari sistem file kamera:
import ssl
ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ctx.load_cert_chain('/flash/cert.der', '/flash/key.der')
Jalur DER berasal dari alur kerja mana pun yang Anda jalankan di bagian TLS -- ditandatangani sendiri untuk pengembangan, ditandatangani CA untuk produksi. File tidak harus berada di /flash; /sdcard juga bekerja dengan baik.
10.11.2. Teruskan konteks ke start_server¶
Satu-satunya perbedaan dari panggilan start_server() sebelumnya adalah argumen ssl=ctx dan nomor port. Port 443 adalah default HTTPS, yang berarti browser tidak perlu mengetikkan :443 -- cukup https://yard-cam.local/ sudah berfungsi:
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())
Itulah yang diperlukan di sisi server. Setiap rute yang sudah ada -- /status, /snapshot.jpg, /stream.jpg, /config, /events, /control, dashboard statis -- kini berjalan melalui TLS tanpa perubahan kode lainnya.
10.11.4. Apa yang tidak tercakup di sini¶
HTTP Strict Transport Security (HSTS), pembaruan sertifikat otomatis, rantai kepercayaan CA di sisi kamera untuk permintaan keluar, dan pilihan cipher suite semuanya ada di bagian TLS. Plugin di sini -- satu SSLContext, satu ssl=ctx -- adalah satu-satunya bagian yang spesifik untuk microdot.
URL dashboard sekarang berubah dari http:// menjadi https:// dan WebSocket dari ws:// menjadi wss:// -- JavaScript dashboard sudah memilih skema yang tepat berdasarkan location.protocol, sehingga tidak diperlukan perubahan pada klien.
Kamera melayani koneksi melalui HTTPS. Formulir login, JWT, dan bingkai yang diambil dienkripsi saat transit.