En la universidad debemos desarrollar una aplicación para Android, que tome nuestras notas de la página web.

Usamos JSoup Framework para capturar y analizar las páginas HTML. El problema ahora es que nuestra universidad utiliza un certificado autofirmado para la conexión HTTPS, que no es de confianza para una CA de confianza más grande.

He visto para estos problemas que ocurren con frecuencia, algunas soluciones generales, pero usan un DefaultHttpClient extendido con un SSLSocketFactory propio. Estas soluciones no se ven muy bien, ¿existe una solución simple y hermosa para esto mediante el uso de JSoup Framework?

private LoginState connect(String username, String password) {
        try {
            if (isOnline()) {
                Log.i(TAG, "Sending POST.");

                Connection connection = Jsoup.connect(LOGIN_URL)
                        .data(USER_FIELD, username).data(PASS_FIELD, password)
                        .data(LOGIN_BUTTON, "Anmelden")
                        .data(LOGIN_TYPE, "login").data(PID, "2")
                        .timeout(DEFAULT_TIMEOUT);

                mDocument = connection.post();

                mCookies.putAll(connection.response().cookies());

                if (isConnected()) {
                    Log.i(TAG, "Login successful.");
                    setState(LoginState.LOGIN_SUCCESSFUL);
                } else {
                    Log.i(TAG, "Login failed.");
                    setState(LoginState.LOGIN_FAILED);
                }
            } else {
                Log.i(TAG, "No Internet Connection.");
                setState(LoginState.BAD_CONNECTION);
            }
        } catch (IOException ex) {
            Log.e(TAG, ex.getStackTrace().toString());
            setState(LoginState.BAD_CONNECTION);
        }

        return getState();
    }
1
Pyth0n 9 dic. 2011 a las 01:24
Relacionado / posible duplicado: stackoverflow.com/a/7745706
 – 
BalusC
10 dic. 2011 a las 03:49
Gracias @Craigy, pero cómo soluciono la siguiente excepción "javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: ancla de confianza para la ruta de certificación no encontrada". para el sitio [dhbw-loerrach.de (dhbw-loerrach.de)? Seguí las instrucciones y me escribí para probar una pequeña aplicación de Java, pero en Android no se ejecutará y finaliza con la excepción anterior. ¿Hay algún error con el tipo de archivo o en su uso en Android 2.3?
 – 
Pyth0n
12 dic. 2011 a las 23:25
Probablemente debería hacer una nueva pregunta sobre ese tema específico
 – 
skynet
12 dic. 2011 a las 23:28

1 respuesta

La mejor respuesta

A menos que JSoup exponga alguna API que le permita pasar su propia tienda de confianza, no. Si tiene un dispositivo rooteado, puede instalar el certificado de la universidad en la tienda de confianza usando this. Si tiene un dispositivo Android 4.0 (ICS), hay una interfaz de usuario para instalar certificados CA confiables. Otra idea: use HttpClient para obtener los datos y luego use JSoup solo para analizar (eso debería ser posible).

1
Nikolay Elenkov 9 dic. 2011 a las 09:36