Autenticazione dell'API Web in stile PKI

0

Sto cercando un metodo relativamente semplice (da usare per il cliente) ma altamente sicuro per l'autenticazione dell'utente sulla mia API. Per sicurezza intendo autenticazione strong. L'API da costruire sarà RESTful e quindi intrinsecamente stateless.

Non voglio utilizzare l'autenticazione HTTP di base poiché la chiave deve essere passata in ogni chiamata API. Anche se l'API sarà disponibile solo tramite HTTPS, esiste sempre la possibilità di un attacco MITM a causa del fatto che il client si fida di una CA dannosa. Piuttosto un tiro lungo, ma mi piacerebbe fare questo diritto a proteggere i dati trasmessi.

La mia proposta è quella di generare una coppia di chiavi, dare la chiave privata al client e tenere il pubblico e una impronta digitale della chiave privata. Il corpo della chiamata API verrebbe crittografato con la chiave privata e l'impronta digitale verrebbe inviata.

Il server dovrebbe quindi cercare l'impronta digitale, associarlo a un account, recuperare la chiave pubblica e tentare la decrittografia. Se fallisce, agisce come se l'utente non fosse quello che dice di essere (come indicato dall'impronta digitale).

  1. Il mio design è sicuro?
  2. Ci sono alternative migliori?
  3. Qualsiasi consiglio / guida sarebbe molto apprezzato.
posta sousdev 11.02.2017 - 17:24
fonte

1 risposta

0

I certificati client sono un metodo consolidato che offre già ciò di cui hai bisogno in modo da non doverne inventare di propri. Il processo è ancora più semplice della tua versione perché puoi semplicemente usare le librerie esistenti. L'idea di base di avere una coppia di chiavi per il cliente è la stessa:

  • Si crea un certificato per il client o il client ne crea uno autonomo. Questo certificato è esplicitamente attendibile dal server o implicitamente perché è stato firmato dall'autorità di certificazione dei server (CA).
  • Nell'handshake TLS il server richiede il certificato dal client. Controlla se il certificato è noto e attendibile. In caso contrario, la connessione non riesce.
  • Questo è tutto.

È impossibile per un uomo in mezzo intercettare attivamente questa connessione usando una CA malevola perché l'uomo nel mezzo dovrebbe riscrivere sia il certificato del server che quello del client. Anche se potresti non essere in grado di controllare se il client considera attendibile questa CA dannosa, puoi assicurarti che il server si fidi solo del certificato conosciuto o dei certificati emessi dai server CA. Ciò significa che un utente malintenzionato non può falsificare il certificato client in un modo che il server considera attendibile.

    
risposta data 11.02.2017 - 17:44
fonte