¿Cómo habilitar la depuración de SSL en la plataforma Android?

¿Hay algo similar a establecer -D javax.net.debug=ssl en la línea de comandos para aplicaciones de escritorio Java, pero para Android? He intentado System.setProperty("javax.net.debug", "ssl"); en código vía System.setProperty("javax.net.debug", "ssl"); Pero eso no funcionó.

Si no hay una forma de habilitar esta propiedad, ¿hay al menos otra manera de depurar el lado del cliente de una conexión SSL?

EDIT: Sólo para aclarar, esto se refiere a sockets SSL crudo (SSLSocket y SSLSocketFactory), no la biblioteca Apache o cualquier otra biblioteca de red.

En este punto, simplemente no parece ser una manera de hacer esto. Pero en cualquier caso, estamos cambiando a la biblioteca de Netty pronto que tiene capacidades de registro más detalladas incorporar.

Así que la solución (no genial) a este problema es simplemente no usar SSLSocket, sino usar una mejor biblioteca de red en su lugar.

Puede escribir una clase TrustManager para manejarla. Ejemplo:

 ClientConnectionManager cm = new BasicClientConnectionManager(); cm.getSchemeRegistry().register(createHttpsScheme()); DefaultHttpClient client = new DefaultHttpClient(cm); String url = "https://your domain/your url"; HttpGet get = new HttpGet(url); HttpResponse resp = client.execute(get); etc.. public static Scheme createHttpsScheme() { SSLContext context = SSLContext.getInstance("TLS"); context.init(null, new TrustManager[] { new TestTrustManager() }, new SecureRandom()); SSLSocketFactory sf = new SSLSocketFactory(context); return new Scheme("https", 443, sf); } 

Int TestTrustManager.java puede imprimir la cadena de esta manera:

 public class TestTrustManager implements X509TrustManager { @Override public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { for (int i = 0; i < chain.length; ++i) { System.out.println(chain[i]); } decorated.checkServerTrusted(chain, authType); } } 

Si está utilizando Apache HttpClient (importando un archivo jar), puede habilitar el registro estableciendo variables ambientales en Eclipse. Si usa Commons Logging, los registros se imprimen en la consola. Sin embargo esto sólo funciona si está ejecutando su aplicación en el emulador y no en el dispositivo. No está seguro de esto ayuda.

Ver http://hc.apache.org/httpcomponents-client-ga/logging.html

He encontrado una ayuda útil de la depuración es escribir un envoltorio alrededor de X509KeyManager y de X509TrustManager que delega llamadas a la puesta en práctica original mientras que registra los resultados, por ejemplo:

  TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); tmf.init(ks); KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); kmf.init(ks, null); TrustManager[] tms = WrapTrustManager.WrapArray(tmf.getTrustManagers()); KeyManager[] kms = WrapKeyManager.WrapArray(kmf.getKeyManagers()); SSLContext context = SSLContext.getInstance("TLS"); context.init(kms, tms, null); ....setSocketFactory(context.getSocketFactory()); 

La implementación de WrapTrustManager y WrapKeyManager son bastante sencillos, pero se les advierte que usan excepciones para indicar fallas y por lo tanto es importante no tragar excepciones mientras registra el resultado.

Tenga en cuenta que la interfaz utiliza las interfaces de KeyManager y TrustManager vacías, y es necesario actualizarlas dinámicamente a X509KeyManager y X509TrustManager.

  • El host remoto cerró la conexión durante el apretón de manos: Certificado Burp en Android
  • Generación e instalación de certificados SSL
  • OkHttp certificado de confianza
  • Error en la autenticación mutua en Android con javax.net.ssl.SSLHandshakeException: El apretón de manos falló
  • ¿Cómo obtener charles proxy trabajo con Android 7 turrón?
  • ¿Qué tan seguros son los certificados SSL de clientes en una aplicación para móviles?
  • Utilizando SSL en android
  • SSLSocketFactory establecimiento de tiempo de espera y propiedades de socket
  • Deshabilitar la comprobación de certificados SSL en la biblioteca de actualización
  • Android: conexión HTTPS (SSL) mediante HttpsURLConnection
  • El ancla de confianza para la ruta de certificación no se encuentra utilizando SSL
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.