Considera un'applicazione (come un notebook IPython) che esegue un server HTTP e che (in base alla progettazione!) consente l'esecuzione di codice arbitrario da parte di utenti autenticati (questo è l'intero punto di IPython, Jupyter et al , e non è un bug).
Chiaramente, è un disastro per qualsiasi utente essere in grado di autenticare ALTRO rispetto all'utente in cui il server è in esecuzione.
Ciò può essere fatto assicurando che solo l'utente autorizzato possa fornire credenziali adeguate e assicurando che tali credenziali vengano fornite solo al server appropriato.
Mi piacerebbe gestirlo in modo completamente automatico.
La soluzione ideale sembra essere il server TLS e i certificati client. Il problema è che questo richiede una configurazione manuale e scomoda. Voglio che non ci sia alcuna configurazione manuale, solo qualcosa che può essere eseguito dal server stesso.
Nota: il server è in esecuzione come lo stesso utente del client, quindi ha accesso in scrittura alle directory utilizzate dal browser client per memorizzare la configurazione per utente. È non in esecuzione come utente privilegiato, quindi non può modificare le regole del firewall.
Una soluzione perfetta sarebbe un modo per applicare un certificato server specifico e fornire un certificato client specifico per il server, il tutto controllato (esternamente) dal processo del server (che è solo un programma a riga di comando che esegue un server HTTPS).
No, il server non può essere eseguito come utente non privilegiato. È davvero un IDE che usa il browser come interfaccia grafica. ha bisogno di essere in grado di eseguire codice arbitrario con i privilegi dell'utente invocante. Da qui la necessità di un'autenticazione assolutamente sicura.
Sì, posso rifiutare le connessioni che non provengono da 127.0.0.1
. Questo non aiuta gli aggressori locali di altri utenti sullo stesso computer.
È possibile o dovrò integrare un browser? Non credo che il Chromium Embedded Framework possa essere di aiuto, in quanto non gestisce il controllo del trust del certificato TLS.