10.11. HTTPS – chiffrement du transport pour le serveur¶
Jusqu’à présent, tout passait en HTTP simple sur le port 80. Quiconque dispose d’une capture de paquets entre le navigateur et la caméra peut lire le mot de passe du formulaire de connexion, le cookie de session qui en revient, le JWT dans l’en-tête Authorization et les octets JPEG de chaque trame capturée. HTTPS chiffre le câble de bout en bout.
Le flux de travail des certificats lui-même – générer un certificat auto-signé pour le développement, obtenir un certificat signé par une CA pour la production, copier les fichiers sur la caméra au bon format – est traité dans Travailler avec les certificats TLS. Cette page traite de l’intégration d’un certificat déjà chargé dans microdot.
10.11.1. Construction du contexte SSL¶
ssl.SSLContext est le conteneur de la bibliothèque standard pour le certificat, la clé et les options de protocole. Pour un serveur, vous voulez PROTOCOL_TLS_SERVER et une chaîne de certificats chargée depuis le système de fichiers de la caméra :
import ssl
ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ctx.load_cert_chain('/flash/cert.der', '/flash/key.der')
Les chemins DER proviennent du flux de travail que vous avez suivi dans la section TLS – auto-signé pour le développement, signé par une CA pour la production. Les fichiers n’ont pas besoin d’être sur /flash ; /sdcard fonctionne tout aussi bien.
10.11.2. Passez le contexte à start_server¶
La seule différence par rapport à l’appel précédent à start_server() est l’argument ssl=ctx et le numéro de port. Le port 443 est la valeur par défaut du HTTPS, ce qui signifie que les navigateurs n’ont pas besoin de saisir :443 – https://yard-cam.local/ suffit :
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())
Voilà pour le côté serveur. Chaque route existante – /status, /snapshot.jpg, /stream.jpg, /config, /events, /control, le tableau de bord statique – fonctionne désormais sur TLS sans aucune autre modification de code.
10.11.4. Ce qui n’est pas couvert ici¶
Le HTTP Strict Transport Security (HSTS), le renouvellement automatique des certificats, la chaîne de confiance de la CA côté caméra pour les requêtes sortantes, et le choix des suites de chiffrement résident tous dans la section TLS. L’intégration présentée ici – un SSLContext, un ssl=ctx – est la seule partie spécifique à microdot.
La barre d’URL du tableau de bord passe maintenant de http:// à https:// et le WebSocket de ws:// à wss:// – le JavaScript du tableau de bord a déjà choisi le bon schéma en fonction de location.protocol, donc aucune modification côté client n’est nécessaire.
La caméra sert en HTTPS. Le formulaire de connexion, le JWT et les trames capturées sont chiffrés pendant le transit.