Utilizza i certificati SSL client come autenticazione dell'applicazione Web

8

Sto lavorando a un'applicazione web con una semplice API che richiede l'autenticazione. Per la mia natura applicativa, gli utenti hanno due chiavi RSA, per la firma e la crittografia dei messaggi. Il mio protocollo funziona basandosi su di esso. L'applicazione web ha accesso alle chiavi pubbliche.

Una soluzione per ottenere l'autenticazione e uccidere MITM consiste nel creare SSL tramite l'API dell'applicazione e creare un metodo di autenticazione utilizzando le chiavi dell'utente. Semplice passaggio di messaggi. Ma sto pensando ad un altro metodo ... Effettua l'autenticazione basata sulla certificazione client SSL. Avevo usato i certificati client per i progetti precedenti, ma ho qualche problema nel decidere se usarlo per questo progetto:

  1. È una cattiva idea utilizzare una delle chiavi RSA dell'utente per generare un certificato per questo?

  2. Esiste un server Web (come wrapper SSL) che può permettermi di estendere le funzionalità durante la negoziazione SSL con un programma esterno? Voglio dire quando l'utente invia la richiesta SSL, cerco il suo certificato in un database (a) e se viene trovato, inserisci un record in un database come ID di sessione e l'applicazione web usa questo (b). Ciò significa non solo concedere l'accesso ad alcuni utenti, ma scoprire quale utente ha effettuato l'accesso. ANSWER : Almeno nginx supporta il passaggio del certificato client ricevuto all'applicazione web. Ci sono passato.

  3. Analisi delle prestazioni. Dubito dell'elevato numero di utenti e delle prestazioni di autenticazione basate su certificati, ma l'autenticazione è una parte della mia applicazione che dovrebbe essere fatta e anche l'SSL. Quale carico extra e latenza posso aspettarmi quando utilizzo i certificati client e rispetto all'utilizzo di certificati server? ANSWER : consulta la risposta di MadHatter

Grazie per i tuoi suggerimenti e scusa per il mio pessimo inglese.

    
posta Amabo 05.03.2013 - 08:25
fonte

1 risposta

5
  1. Il metodo normale per eseguire la convalida del certificato client è creare la propria Autorità di certificazione (CA) e utilizzare tale CA per coniare i certificati client, che vengono distribuiti ai client. Il server deve quindi solo verificare che un certificato client abbia una firma valida dalla CA preconfigurata o che abbia una catena di trust valida che riconduca a quella CA, per sapere che il certificato del client è buono.

  2. Vedi sopra.

  3. Pochissimo overhead in più, almeno quando fatto come sopra. Tutti i client hanno comunque certificati (chiavi pubbliche), sono solo (di solito) autofirmati e vengono utilizzati solo per la crittografia piuttosto che per l'autenticazione e della crittografia; se un client utilizza un certificato con una firma valida su di esso, avere il server che convalida quel certificato è un extra minimo molto piccolo.

risposta data 05.03.2013 - 10:29
fonte

Leggi altre domande sui tag