Sto estendendo un framework Sub Pub p2p / master esistente per supportare misure di sicurezza aggiuntive, tramite la crittografia over the wire e il controllo degli accessi basato su argomenti. Mi piacerebbe utilizzare i certificati x.509 che io genero per i nodi per comunicare su TLS per includere anche le politiche specifiche sull'argomento del nodo; Limiti a quali argomenti il certificato può essere utilizzato per iscriversi o pubblicare con.
L'idea corrente è tale:
- Bootsrap
- keyserver & master avviato
- grafico a livello di grafico caricato in keyserver
- i nuovi nodi senza certificati richiedono keyserver
- keyserver cerca i sottocomponenti pub che corrispondono allo spazio dei nomi del nodo
- keyserver restituisce nodo un certificato con criterio secondario pub incorporato
- Out in the wild
- viene avviato solo il master, nessun server delle chiavi
- i nodi avviati utilizzano il certificato esistente per registrarsi con il master
- il master registra l'editore o il sottoscrittore per gli argomenti richiesti
- (il master potrebbe provare ad applicare il criterio grafico qui, ma il master solo notifica agli iscritti dove si trovano gli editori, il trasporto dei messaggi per gli argomenti è ancora p2p)
- l'utente tenta di connettersi al publisher
- editore controlla scrupolosamente il certificato del sottoscrittore per verificare se dispone dell'autorizzazione per leggere l'argomento
- nel frattempo l'abbonato fa lo stesso, controllando che l'editore abbia il permesso di scrivere sull'argomento
- se la verifica dell'etere fallisce, la connessione viene rifiutata!
Mi piacerebbe utilizzare lo stile di sintassi globbing di apparmor per consentire agli utenti inesperti di generalizzare semplicemente il controllo degli accessi sui percorsi, questo può essere analizzato e ricercato abbastanza facilmente e quindi incorporare l'insieme delle politiche di matching nel cert come forse un ( human readable dai comuni cert viewer? multi-line indented ?) string. Un esempio potrebbe essere simile a questo:
criterio grafico:
nodes:
/*:
topics:
/logout{,_agg}:
allow: rw
/listener{,1,2}/**:
topics:
/chatter:
allow: r
/talker:
topics:
/chatter:
allow: w
criterio del nodo risultante per / listener:
topics:
/logout{,_agg}:
allow: rw
/chatter:
allow: r
In questo modo, se il nodo principale è mai compromesso (ma non il server di chiavi assente), i nodi in natura non possono essere ingannati a parlare o ascoltare qualcuno che non dovrebbe. Esiste un'estensione di certificato esistente che dovrei usare o un particolare modulo con cui dovrei incorporarli, oppure c'è solo un modo migliore per farlo?