Si es sólo el cliente y el servidor, puede (y debe) utilizar SSL sin comprar nada. Usted controla el servidor y el cliente, por lo que cada uno solo debe confiar en un certificado, el que pertenece al otro y no necesita CA para este fin.
Aquí está el enfoque de alto nivel. Cree un certificado SSL de servidor autofirmado e impleméntelo en su servidor web. Puede utilizar la herramienta de claves incluida con el SDK de Android para este fin. Luego, cree un cliente autofirmado e impleméntelo dentro de su aplicación en un almacén de claves personalizado incluido en su aplicación como recurso (keytool también lo generará). Configure el servidor para que requiera autenticación SSL del lado del cliente y solo acepte el certificado del cliente que haya generado. Configure el cliente para que use ese certificado del lado del cliente para identificarse y solo acepte el certificado del lado del servidor que instaló en su servidor para esa parte del mismo.
Un paso a paso para esto es una respuesta mucho más larga de lo que está garantizado aquí. Sugeriría hacer esto en etapas, ya que hay recursos en la web sobre cómo lidiar con el certificado SSL autofirmado en Android, tanto del lado del servidor como del lado del cliente. También hay un recorrido completo en mi libro, Application Security for the Android Platform, publicado por O'Reilly.
Usted normalmente tienda que/clave privada del certificado en un almacén de claves de sometype (un almacén de claves si está usando Android) y que almacén de claves se cifrará. Esa encriptación se basa en una contraseña, por lo que deberá (1) almacenar esa contraseña en su cliente en alguna parte, o (2) pedirle al usuario la contraseña cuando inicie su aplicación cliente. Lo que debe hacer depende de su uso. Si (2) es aceptable, entonces ha protegido su credencial contra la ingeniería inversa, ya que será encriptada y la contraseña no se almacenará en ningún lugar (pero el usuario deberá ingresarla cada vez). Si lo hace (1), alguien podrá realizar una ingeniería inversa de su cliente, obtener la contraseña, obtener el almacén de claves, descifrar la clave privada y el certificado, y crear otro cliente que pueda conectarse al servidor.
No hay nada que pueda hacer para evitar esto; puede hacer que la ingeniería inversa sea más difícil para su código (por ofuscación, etc.) pero no puede hacerlo imposible. Debe determinar cuál es el riesgo que está tratando de mitigar con estos enfoques y cuánto trabajo vale la pena para mitigarlo.
¿Qué tal algo como [esto] (http://www.javaranch.com/journal/200603/WSSecurity.html)? – loscuropresagio