10.11. HTTPS – cifrado de transporte para el servidor¶
Hasta ahora todo ha sido HTTP plano en el puerto 80. Cualquiera con una captura de paquetes entre el navegador y la cámara puede leer la contraseña del formulario de inicio de sesión, la cookie de sesión que este devuelve, el JWT en la cabecera Authorization y los bytes JPEG de cada fotograma capturado. HTTPS cifra el canal de extremo a extremo.
El flujo de trabajo del certificado en sí – generar un certificado autofirmado para desarrollo, obtener un certificado firmado por una CA para producción, copiar los archivos a la cámara en el formato correcto – se cubre en Trabajar con certificados TLS. Esta página trata sobre conectar a microdot un certificado ya cargado.
10.11.1. Construir el contexto SSL¶
ssl.SSLContext es el contenedor de la biblioteca estándar para el certificado, la clave y las opciones de protocolo. Para un servidor querrás PROTOCOL_TLS_SERVER y una cadena de certificados cargada desde el sistema de archivos de la cámara:
import ssl
ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ctx.load_cert_chain('/flash/cert.der', '/flash/key.der')
Las rutas DER provienen del flujo de trabajo que hayas ejecutado en la sección de TLS – autofirmado para desarrollo, firmado por CA para producción. Los archivos no tienen por qué estar en /flash; /sdcard funciona igual de bien.
10.11.2. Pasar el contexto a start_server¶
La única diferencia respecto a la llamada anterior a start_server() es el argumento ssl=ctx y el número de puerto. El puerto 443 es el predeterminado de HTTPS, lo que significa que los navegadores no necesitan escribir :443 – basta con 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())
Eso es todo en el lado del servidor. Todas las rutas existentes – /status, /snapshot.jpg, /stream.jpg, /config, /events, /control, el panel estático – ahora se ejecutan sobre TLS sin ningún otro cambio de código.
10.11.4. Lo que no se cubre aquí¶
HTTP Strict Transport Security (HSTS), la renovación automática de certificados, la cadena de confianza de la CA en el lado de la cámara para peticiones salientes, y la elección de las suites de cifrado, todo ello vive en la sección de TLS. La conexión que se hace aquí – un SSLContext, un ssl=ctx – es la única pieza específica de microdot.
La barra de URL del panel pasa ahora de http:// a https:// y el WebSocket de ws:// a wss:// – el JavaScript del panel ya eligió el esquema correcto basándose en location.protocol, por lo que no se necesitan cambios en el cliente.
La cámara sirve sobre HTTPS. El formulario de inicio de sesión, el JWT y los fotogramas capturados se cifran durante el tránsito.