2010-09-02 14 views
9

Ich baue eine Testversion einer App für einen Client. Ein Teil dieser App verwendet ein WebView, das zu einer SSL-basierten Site aufruft. Der Client hat wiederum eine Testdomäne bereitgestellt, in der der Zertifikatsname nicht mit dem FQDN übereinstimmt. Leider sind sie nicht in der Lage, ein passendes Zertifikat zu liefern. :(Android WebView SSL 'Sicherheitswarnung'

Ich arbeite dieses Problem auf der begleitenden iOS Ad-hoc-App mit einer Zeile Code (wieder, nicht für den Produktionseinsatz - nur zu Testzwecken). Ich habe ähnliche Informationen auf Android OS gesucht, aber die Lösungen, die ich hier und anderswo gesehen habe, sind genug, um meinen Kopf dreht große Zeit im Vergleich!

gibt es eine einfache Möglichkeit, dies zu umgehen? Selbst ein Benutzer gerichtete Einstellung versteckt irgendwo zu machen?

Clues geschätzt!

Antwort

6

Erstellen Sie einen WebViewClient und behandeln Sie den onReceivedSslError, der wie folgt aussieht:

Innerhalb dieses Rückrufs können Sie einfach handler.proceed() anrufen und die Seite wird weiter geladen. Wenn Sie diesen Rückruf nicht verarbeiten und die Methode proceed() aufrufen, wird die Seite standardmäßig nicht geladen.

+1

WARNUNG: Das ist gefährlich - es entfernt alle Sicherheit von SSL. Ich weiß, dass Joe es nur in seine Test-App aufnehmen möchte, was gut ist, aber die Sicherheitsgemeinschaft hat viele Fälle gesehen, in denen diese Art von Code unbeabsichtigt in Produktionsversionen gelangt und ihre Sicherheit stillschweigend und unbeabsichtigt beeinträchtigt. Also, wenn Sie Sicherheit wie folgt ausschalten, SEHR VORSICHTIG, um sicherzustellen, dass es nicht zu Ihren Release-Versionen verbreitet. Vielen Dank, dass Sie sich diese öffentliche Bekanntmachung angehört haben. –

0

Aktualisierte Antwort gemäß dem neuen Sicherheitsrichtlinien-Update für SSL Error Handler von Google, bitte lesen Sie diese Android-Entwickler Help Center article.

Um zu verhindern, dass die Anwendung bei Google Play abgelehnt wird, weil sie gegen die Richtlinie zu schädlichem Verhalten verstößt.

Um die Überprüfung des SSL-Zertifikats ordnungsgemäß durchzuführen, ändern Sie den Code so, dass SslErrorHandler.proceed() immer dann aufgerufen wird, wenn das vom Server vorgelegte Zertifikat Ihren Erwartungen entspricht, und rufen Sie andernfalls SslErrorHandler.cancel() auf.

Zum Beispiel, ich füge einen Warndialog, um Benutzer bestätigt haben und scheint Google nicht mehr Warnung angezeigt.

@Override 
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) { 
final AlertDialog.Builder builder = new AlertDialog.Builder(this); 
String message = "SSL Certificate error."; 
    switch (error.getPrimaryError()) { 
     case SslError.SSL_UNTRUSTED: 
      message = "The certificate authority is not trusted."; 
      break; 
     case SslError.SSL_EXPIRED: 
      message = "The certificate has expired."; 
      break; 
     case SslError.SSL_IDMISMATCH: 
      message = "The certificate Hostname mismatch."; 
      break; 
     case SslError.SSL_NOTYETVALID: 
      message = "The certificate is not yet valid."; 
      break; 
    } 
    message += " Do you want to continue anyway?"; 

    builder.setTitle("SSL Certificate Error"); 
    builder.setMessage(message); 

builder.setPositiveButton("continue", new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     handler.proceed(); 
    } 
}); 
builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     handler.cancel(); 
    } 
}); 
final AlertDialog dialog = builder.create(); 
dialog.show(); 

}