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.
Che dire di qualcosa come [questo] (http://www.javaranch.com/journal/200603/WSSecurity.html)? – loscuropresagio