10.11. HTTPS – шифрування транспорту для сервера¶
До цього моменту все передавалось через звичайний HTTP на порту 80. Будь-хто, хто перехопить пакети між браузером і камерою, зможе прочитати пароль з форми входу, сесійний cookie, що повертається у відповідь, JWT у заголовку Authorization і JPEG-байти кожного захопленого кадру. HTTPS шифрує передачу даних від початку до кінця.
Сам процес роботи із сертифікатами — генерація самопідписаного сертифіката для розробки, отримання сертифіката від CA для production, копіювання файлів на камеру в правильному форматі — описано в Робота з TLS-сертифікатами. Ця сторінка присвячена підключенню вже завантаженого сертифіката до microdot.
10.11.1. Побудова SSL-контексту¶
ssl.SSLContext — це контейнер стандартної бібліотеки для сертифіката, ключа та параметрів протоколу. Для сервера вам потрібен PROTOCOL_TLS_SERVER і ланцюжок сертифікатів, завантажений із файлової системи камери:
import ssl
ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ctx.load_cert_chain('/flash/cert.der', '/flash/key.der')
Шляхи DER беруться з того робочого процесу, який ви використовували в розділі TLS — самопідписані для розробки, підписані CA для production. Файли не обов’язково мають бути на /flash; /sdcard так само підходить.
10.11.2. Передача контексту до start_server¶
Єдина відмінність від попереднього виклику start_server() — аргумент ssl=ctx і номер порту. Порт 443 — це стандарт HTTPS, тобто браузерам не потрібно вводити :443 — достатньо просто 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())
Це все, що потрібно на стороні сервера. Усі існуючі маршрути — /status, /snapshot.jpg, /stream.jpg, /config, /events, /control, статична панель керування — тепер працюватимуть через TLS без будь-яких інших змін у коді.
10.11.4. Що тут не розглядається¶
HTTP Strict Transport Security (HSTS), автоматичне оновлення сертифікатів, ланцюжок довіри CA на стороні камери для вихідних запитів та вибір наборів шифрів — все це розглядається в розділі TLS. Підключення тут — один SSLContext, один ssl=ctx — є єдиною частиною, специфічною для microdot.
Рядок URL-адреси панелі керування тепер змінюється з http:// на https://, а WebSocket — з ws:// на wss:// — клієнтський JavaScript панелі керування вже обирає правильну схему на основі location.protocol, тому зміни на стороні клієнта не потрібні.
Камера обслуговує запити через HTTPS. Форма входу, JWT і захоплені кадри зашифровані під час передачі.