Phonegap / Cordova lista cruzada de dominios cruzados solicitud SSL no funciona después de exportar APK

He creado una aplicación de teléfono que necesita comunicarse con un servicio SSL auto-firmado.

I whitelisted mi url en res / xml / cordova.xml como así:

<access origin="https://www.mydomain.com" subdomains="true" />

Y esto funciona bien cuando corro y construyo desde eclipse, pero si luego exportar y firmar mi aplicación e instalar manualmente el APK entonces la aplicación no puede comunicarse con mi servicio web.

La comunicación con el servidor se realiza con la biblioteca Sencha Touch de la siguiente manera:

 Ext.Ajax.request({ url: 'https://www.mydomain.com', method: 'get', success: function(result) { }, failure: function(result) { } }); 

Cualquier ayuda muy apreciada

El problema es que está utilizando un cert auto-firmado. La WebView de Android no permite por defecto certificados SSL auto-firmados. PhoneGap / Cordova anula esto en la clase CordovaWebViewClient pero no desvía su comportamiento por mucho; Si la aplicación está debug-firmada, proceed e ignorará el error, de lo contrario, se producirá un error.

Puede cambiar el código vinculado anteriormente en su aplicación y hacer que el método onReceivedSslError siempre llame a handler.proceed() – pero esto no se recomienda. ¡No use un certificado autofirmado!

Hice lo siguiente para evitar la restricción (actualmente usando Cordova 1.7.0). Esto es definitivamente inherentemente inseguro:

 public class MyWebViewClient extends CordovaWebViewClient { public MyWebViewClient(DroidGap ctx) { super(ctx); } @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { // testing against getPrimaryError() or hasErrors() will fail on Honeycomb or older. // You might check for something different, such as specific info in the certificate, //if (error.getPrimaryError() == SslError.SSL_IDMISMATCH) { handler.proceed(); //} else { // super.onReceivedSslError(view, handler, error); //} } } 

Y luego en la actividad principal:

 @Override public void init() { super.init(); //pass in our webviewclient to override SSL error this.setWebViewClient(this.appView, new MyWebViewClient(this)); } 
  • HttpsURLConnection setDoOutput (true) no funciona
  • Comodo SSL: ERR_CERT_AUTHORITY_INVALID en Chrome móvil y Opera móvil (Android)
  • HttpsUrlConnection: Ancla de confianza para ruta de certificación no encontrada en 2.3
  • Descarga de recursos de imágenes desde https con LoopJ AndroidAsyncHttp
  • Cómo habilitar la compatibilidad con TLS 1.2 en una aplicación de Android (en ejecución en Android 4.1 JB)
  • Cómo publicar HTTPS en Android
  • Cómo permitir que todas las URL HTTPS se sincronicen en CouchbaseLite Android
  • Problema con el certificado: aparece la página SSL "necesita establecer un pin o una contraseña de bloqueo de pantalla para poder usar el almacenamiento de credenciales" en Android
  • El uso de la dirección IP para el nombre común en el certificado del servidor no funciona en Android?
  • ¿Cómo actualizo el SSL cert en mis aplicaciones Android?
  • Android WebView bloquea el redireccionamiento de https a http
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.