Publicación HTTP segura en Android con certificado autofirmado

Actualmente estoy trabajando en mi primera aplicación de Android y la primera API para el sitio web de mi organización. Estoy intentando conectarme a la api desde la aplicación de Android usando una conexión segura. Nuestro sitio web tiene un puerto de prueba en 8090 que estoy tratando de usar para probar la API, pero el problema con el que me encuentro es que tengo un certificado autofirmado en el sitio web que, según lo que he leído en línea, las aplicaciones de Android no ' T como. Para asegurarme de que no haya un problema con la API, la he usado con una conexión http en lugar de https y funciona muy bien. He probado un par de soluciones que encontré en línea, incluidas algunas de este sitio, pero ninguna parece funcionar. Nuevamente, no tengo mucha experiencia con el desarrollo para Android, por lo que muchos de mis intentos fueron solo copiar y pegar de la solución que encontré en línea. Aquí hay algunos enlaces a lo que he intentado:

Https Connection Android

http://yekmer.posterous.com/how-to-accept-self-signed-certificates-in-and

hay otras páginas a las que no puedo encontrar los enlaces ahora, pero a continuación se muestra el código que estoy usando actualmente para conectarme:

        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("https://website.edu:8090/api.php?");

        try {
            // Add your data
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
            nameValuePairs.add(new BasicNameValuePair("method", "login"));
            nameValuePairs.add(new BasicNameValuePair("user", username.getText().toString()));
            nameValuePairs.add(new BasicNameValuePair("pass", md5(password.getText().toString())));
            nameValuePairs.add(new BasicNameValuePair("submitLogin", "1"));
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8));
            HttpParams params = httppost.getParams();
            HttpConnectionParams.setConnectionTimeout(params, 45000);
            HttpConnectionParams.setSoTimeout(params, 45000);

            // Execute HTTP Post Request
            HttpResponse response = httpclient.execute(httppost);
        } catch (ClientProtocolException e) {
            e.printStackTrace();                
        } catch (IOException e) {               
            e.printStackTrace();
        }

También me gustaría agregar que comprar un certificado no es una opción, ya que no tenemos un presupuesto para trabajar, por lo que cualquier cosa que pueda solucionar el problema del certificado autofirmado sería genial. ¡Gracias por adelantado!

Respuesta 1

Implementé en Android una pequeña aplicación que envía cadenas de conexión de socket a un servidor (C #). Por ahora, solo codifico las cadenas que envío (problemas de seguridad), pero ahora necesito ...

Tengo problemas para entender cómo funcionan las variables privadas y públicas. Estoy tratando de llenar la variable myStorage.outString de myThread. Pero parece que no puedo ver el método setInString desde ...

Para un proyecto escolar, tengo que crear un sistema distribuido a partir de una aplicación independiente. Estamos usando RMI para la comunicación, pero nos encontramos con algunos problemas. El servidor que creé comienza bien, ...

Tengo este problema al usar j2me con eclipse y eclipseme: cuando comienzo a ejecutar la aplicación, no hace nada y obtengo este resultado ... Advertencia: Ejecutar JAM, ignorando todas las demás opciones (pero "...