2012-02-24 9 views

risposta

7

Se è solo il vostro client e il server, è possibile utilizzare SSL (e dovrebbe) senza acquistare nulla. Tu controlli il server e il client, quindi ognuno dovrebbe fidarsi solo di un certificato, quello appartenente all'altro e non è necessario CA per questo scopo.

Ecco l'approccio di alto livello. Creare un certificato SSL del server autofirmato e distribuirlo sul proprio server web. A questo scopo è possibile utilizzare lo strumento Keytool incluso con l'SDK di Android. Quindi creare un client autofirmato e distribuirlo all'interno dell'applicazione in un keystore personalizzato incluso nell'applicazione come risorsa (anche lo strumento keytool genererà questo). Configurare il server per richiedere l'autenticazione SSL sul lato client e accettare solo il certificato client generato. Configurare il client per utilizzare tale certificato sul lato client per identificarsi e accettare solo il certificato sul lato server installato sul server per quella parte di esso.

Un passo per passo è una risposta molto più lunga di quanto è giustificato qui. Suggerirei di farlo in fasi poiché ci sono risorse sul Web su come gestire il certificato SSL autofirmato in Android, sia lato server che lato client. Nel mio libro c'è anche un passaggio completo, Application Security for the Android Platform, pubblicato da O'Reilly.


Potrai normalmente memorizzare che /-chiave privata del certificato in un archivio di chiavi di sometype (un KeyStore se si sta utilizzando Android) e che keystore verranno crittografati. Quella crittografia è basata su una password, quindi dovrai (1) memorizzare la password nel tuo client da qualche parte, o (2) chiedere all'utente la password quando avvieranno l'app client. Quello che devi fare dipende dal tuo caso. Se (2) è accettabile, hai protetto le tue credenziali contro il reverse engineering poiché sarà crittografato e la password non verrà memorizzata da nessuna parte (ma l'utente dovrà digitarlo in ogni momento). Se si esegue (1), quindi qualcuno sarà in grado di decodificare il client, ottenere la password, ottenere il keystore, decrittografare la chiave privata e il certificato e creare un altro client che sarà in grado di connettersi al server.

Non c'è niente che puoi fare per impedirlo; puoi rendere più difficile il reverse engineering del codice (offuscamento, ecc.) ma non puoi renderlo impossibile. È necessario determinare quale sia il rischio che si sta tentando di mitigare con questi approcci e quanto vale la pena lavorare per attenuarlo.

+0

È possibile che qualcuno rubi questo certificato dall'app e lo usi in un'app falso? – pyeleven

+0

Sì. Vedi la risposta rivista sopra. – jeffsix

+0

Queste sono informazioni sufficienti per prendere la nostra decisione, grazie! Vorrei capire in che modo il certificato dell'app Android si riferisce a tutto questo, puoi indicarmi la giusta direzione? Voglio dire che il certificato dell'app può essere usato come un certificato ssl lato client? – pyeleven

1

Se siete assolutamente certi di questo servizio web sarà solo bisogno di essere accessibile da applicazioni/dispositivi autorizzati, andare con i certificati SSL client-side e limitare l'accesso al server solo ai client con certificati autorizzati. Questo ha la funzione bonus di forzare SSL in ogni momento quindi non ti piacciono i segreti di autenticazione su un canale aperto. Ecco un breve resoconto per Apache, ma è possibile utilizzare nginx troppo:

http://it.toolbox.com/blogs/securitymonkey/howto-securing-a-website-with-client-ssl-certificates-11500

+0

Questo certificato può essere copiato da un'applicazione diversa? Questa applicazione sarà in grado di sfruttare il servizio? – pyeleven

Problemi correlati