L'introduzione di certificati client per un'app mobile può migliorare la sicurezza?

4

Ho sviluppato un'API REST che è stata configurata per funzionare solo su HTTPS. L'unico scopo di questa API (almeno per il momento) è quello di operare come punto di ingresso back-end per un'applicazione mobile.

Ho eseguito il rollover del mio protocollo di autenticazione token ( vedi questa domanda / risposte ) che viene utilizzato per l'autenticazione del client. La ragione principale alla base di questo è stata la possibilità di generare token sicuri / riutilizzabili che il cliente poteva memorizzare localmente e amp; riutilizzo su richieste successive. Dal momento che ho il controllo su questi server lato dei token ho la possibilità di scadere / invalidare costringendo il client a ri-autenticarsi (cioè generare un nuovo token) e sto anche prendendo delle precauzioni per evitare simili attacchi MitM / Replay. Per far funzionare tutto questo devono esserci alcune informazioni sensibili passate attraverso il filo in testo normale, tuttavia, tutto funziona su SSL quindi AFAIK non c'è nulla di cui preoccuparsi qui (?).

Ci sono un paio di parti di questa configurazione corrente che mi riguardano però:

  1. Per l'autenticazione del server, quando l'app riceve il certificato del server (autofirmato) Sto solo controllando se l'oggetto del certificato (ad esempio CN = nome dominio) è uguale all'indirizzo API, cioè se il punto di ingresso dell'API è api.mydomain.com quindi deve ricevere un certificato con oggetto CN = api.mydomain.com altrimenti la sessione SSL avrà esito negativo.

  2. Non c'è protezione dal punto di vista dei server da richieste anonime. L'autenticazione del client avviene solo nel punto in cui l'intestazione / le informazioni del post vengono ispezionate. Credo che questo potrebbe lasciare la porta aperta agli attacchi Dos. Idealmente, vorrei che il server accettasse solo le richieste provenienti da una fonte conosciuta .

La mia preoccupazione per il primo problema è che è troppo facile aggirarlo, l'indirizzo api è configurabile dalle impostazioni e amp; chiunque può generare un certificato autofirmato, quindi sarebbe piuttosto semplice ingannare l'app nel pensare che stia parlando con il server corretto. Il secondo problema è più solo una preoccupazione generale, tuttavia, se potessi filtrare qualsiasi richiesta del client non autenticata, sarebbe un bonus!

L'unica cosa che mi viene in mente di risolvere (almeno il 2 ° problema) è introdurre certificati client. La mia preoccupazione per questo è il tempo di implementazione, la complessità di implementazione e la gestione dei certificati stessi. Immagino che quello che sto cercando sia un consiglio se (basato sulla configurazione corrente) l'introduzione di certificati client sul dispositivo mi mi guadagni qualcosa qui?

    
posta James 24.03.2013 - 13:41
fonte

1 risposta

2

Autenticazione significa assicurarsi che chiunque si trovi dall'altra parte della connessione sia chi credi che sia. Poiché si tratta di crittografia e computer e reti, "chi sei" equivale a "ciò che puoi calcolare" (è tutto ciò che puoi osservare da un server remoto), che a sua volta deriva da "ciò che sai" (tutti possono acquistare un PC, quindi la capacità di calcolare qualsiasi cosa è davvero la conoscenza degli input per i calcoli). Ad esempio, per l'autenticazione basata su password, un utente viene autenticato relativamente alla sua conoscenza della password.

Tale conoscenza è collegata a una registrazione iniziale in cui il valore segreto, qualunque esso sia, acquista il suo significato speciale. Sempre per l'esempio di password, questa è la procedura con cui l'utente sceglie la sua password, e il server lo registra (o un suo hash) nelle sue interiora.

I certificati sono utili in contesti in cui registration e authentication sono fatti da entità distinte: la registrazione viene effettuata da un'autorità di certificazione , che emette (firma) il certificato client, mentre la verifica viene eseguita dal server stesso, che convalida il certificato (verifica la firma dalla CA) e quindi verifica una nuova firma calcolata dal client (è così che i certificati client sono utilizzati in SSL).

Se si dispone di un solo server, che decide chi può connettersi e quindi autentica questi client, i certificati client sono inutili: non apportano alcuna funzionalità o sicurezza aggiuntiva rispetto a uno show-the- protocollo di password (purché la "password" sia una chiave con sufficiente entropia e il protocollo sia riprodotto all'interno di SSL).

    
risposta data 24.03.2013 - 14:55
fonte

Leggi altre domande sui tag