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ò:
-
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.
-
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?