2012-06-10 6 views
6

Ich habe eine Phonegap-App erstellt, die mit einem selbstsignierten SSL-Dienst kommunizieren muss.Phonegap/Cordova Whitelist Domain-SSL SSL-Anfrage funktioniert nicht nach dem Exportieren APK

ich die weiße Liste gesetzt meine url in res/xml/cordova.xml wie so:

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

und das funktioniert gut, wenn ich von Eclipse laufen und bauen, aber wenn ich dann den Export und meine App anmelden und manuell Installieren Sie das APK, dann kann die App nicht mit meinem Webdienst kommunizieren.

Die Kommunikation mit dem Server ist, wie so die Sencha Touch-Bibliothek durchgeführt:

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

Jede Hilfe viel

Antwort

10

Das Problem erkannt ist, dass Sie ein selbst signiertes Zertifikat verwenden. Das Android WebView erlaubt standardmäßig keine selbstsignierten SSL-Zertifikate. PhoneGap/Cordova overrides this in the CordovaWebViewClient class aber nicht sein Verhalten um viel abweichen; Wenn die App Debug-signiert ist, wird und der Fehler ignoriert, andernfalls wird es fehlschlagen.

Sie könnten die oben verlinkten Code in Ihrer Anwendung ändern und die onReceivedSslError Methode immer handler.proceed() aufrufen - aber dies wird nicht empfohlen. Verwenden Sie kein selbstsigniertes Zertifikat!

+0

Ja, ich habe ein SSL-Zertifikat signiert und es funktionierte gut. Danke für Ihre Hilfe. –

+0

@DeanWild Ich habe das gleiche Problem, fragen Sie ein SSL-Zertifikat von Ihrem API-Provider/Server und verwenden Sie es, um Ihre APK zu signieren? – JunM

+0

Nein, Sie erwerben ein SSL-Zertifikat von einem Anbieter (es gibt viele Anbieter, zB: http://www.verisign.com/), dann installieren Sie dieses SSL-Zertifikat auf Ihrem Webserver –

3

Ich habe Folgendes getan, um die Einschränkung zu umgehen (derzeit mit Cordova 1.7.0). Dies ist auf jeden Fall von Natur aus unsicher:

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); 
     //} 
    } 
} 

und dann in der Haupttätigkeit:

@Override 
public void init() { 
    super.init(); 

    //pass in our webviewclient to override SSL error 
    this.setWebViewClient(this.appView, new MyWebViewClient(this)); 
} 
Verwandte Themen