¿Cómo puedo establecer SignalR en Android Studio para ignorar los problemas de SSL para el desarrollo

Tengo un sitio que utiliza SignalR. El código siguiente (tomado del ejemplo de SignalR-Chat) se conecta al sitio de producción con su SSL verificado. Utiliza los tarros de SignalR / java-client.

Pero para el desarrollo necesito conectarse a un proyecto de VS que se aloja en mi computadora con IIS Express y un SSL local que mi Nexus no puede y no se supone para verificar, y consigo los errores siguientes:

08-17 16:13:55.540 2153-6860//System.out﹕ HubConnection: Error executing request: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 08-17 16:13:55.541 2153-6859//System.err﹕ java.util.concurrent.ExecutionException: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 

Ya he abierto los puertos pertinentes en el servidor de seguridad y puedo llegar a las solicitudes de IIS Express con reposo.

Aquí está el código:

 public class gtSockets { public static final String URL = myUrl + "/signalr/hubs/"; HubConnection connection; HubProxy hub; DemonThread thread; private Context context; private static gtSockets gtSockets; private gtSockets(Context context) { this.context = context; initConnection(); } public static gtSockets newInstance(Context context) { if(gtSockets == null) { gtSockets = new gtSockets(context); } return gtSockets; } private void initConnection() { Platform.loadPlatformComponent(new AndroidPlatformComponent()); connection = new HubConnection(URL, null, true, new Logger() { @Override public void log(String s, LogLevel logLevel) { } }); hub = connection.createHubProxy("myHub"); hub.on("broadcastMessage", new SubscriptionHandler2<String, String>() { @Override public void run(String msgType, String msg) { } }, String.class,String.class); thread = new DemonThread(); thread.start(); } public void destroy() { if(thread != null) { thread.cancel(); thread = null; } if(connection != null) { connection.stop(); } } private class MessageSendTask extends AsyncTask<String,String,String> { @Override protected String doInBackground(String... params) { hub.invoke("send","directory",params[1]); return "ok"; } } private class DemonThread extends Thread { boolean isRunning = true; @Override public void run() { SignalRFuture<Void> awaitConnection = connection.start(); while(isRunning) { try { awaitConnection.get(); } catch (InterruptedException | ExecutionException e){ e.printStackTrace(); } } awaitConnection.cancel(); } public void cancel() { if(isRunning) { isRunning = false; } } } } 

Las preguntas son ¿cómo puedo establecer SignalR para ignorar los problemas de SSL para el desarrollo ?!

Gracias.

Si sólo para el desarrollo, creo que puede referir el siguiente código (disponible en SO):

 public class HttpsTrustManager implements X509TrustManager { private static TrustManager[] trustManagers; private static final X509Certificate[] _AcceptedIssuers = new X509Certificate[]{}; @Override public void checkClientTrusted( X509Certificate[] x509Certificates, String s) throws java.security.cert.CertificateException { } @Override public void checkServerTrusted( X509Certificate[] x509Certificates, String s) throws java.security.cert.CertificateException { } public boolean isClientTrusted(X509Certificate[] chain) { return true; } public boolean isServerTrusted(X509Certificate[] chain) { return true; } @Override public X509Certificate[] getAcceptedIssuers() { return _AcceptedIssuers; } public static void allowAllSSL() { HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() { @Override public boolean verify(String arg0, SSLSession arg1) { return true; } }); SSLContext context = null; if (trustManagers == null) { trustManagers = new TrustManager[]{new HttpsTrustManager()}; } try { context = SSLContext.getInstance("TLS"); context.init(null, trustManagers, new SecureRandom()); } catch (NoSuchAlgorithmException | KeyManagementException e) { e.printStackTrace(); } HttpsURLConnection.setDefaultSSLSocketFactory(context != null ? context.getSocketFactory() : null); } 

}

A continuación, en su actividad, llame a HttpsTrustManager.allowAllSSL(); Antes de los métodos SignalR

  • HttpsUrlConnection: Ancla de confianza para ruta de certificación no encontrada en 2.3
  • Intermitente PeerUnverifiedException: No hay certificado de compañero con el cliente de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.