Frage

Ich baue eine Testversion einer App für einen Kunden. Ein Teil dieser App verwendet eine WebView, die auf eine SSL-basierte Website ruft. Im Gegenzug hat der Kunde eine Testdomäne zur Verfügung gestellt, wo der Name des Zertifikats nicht den FQDN entspricht. Ach, sie sind nicht in der Lage, die Bereitstellung einer cert, dass Streichhölzer. : (

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

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

Clues geschätzt!

War es hilfreich?

Lösung

Erstellen Sie eine WebViewClient und handhaben die onReceivedSslError die aussieht wie folgt:

public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error)

Innerhalb dieser Rückruf können Sie einfach handler.proceed() aufrufen und die Seite Laden fortzusetzen. Wenn Sie nicht über diesen Rückruf behandeln und die proceed() Methode aufrufen, dann das Standardverhalten für die Seite nicht zu Last sein wird.

Andere Tipps

aktualisiert Antwort nach Googles neue Sicherheitsrichtlinie Update für SSL Error Handler finden Sie in diesem Android Developers Hilfeartikel .

Für Prevent Ablehnung des Antrags auf Google Play für unser Bösartiges Verhalten Politik verletzen.

Um richtig SSL-Zertifikatüberprüfung umgehen, um Ihren Code zu invoke SslErrorHandler.proceed () ändern, wenn das Zertifikat von dem Server präsentierte Ihre Erwartungen entspricht, und invoke SslErrorHandler.cancel () sonst.

Zum Beispiel habe ich einen Alarm Dialog zu machen Benutzer hinzufügen, haben bestätigt, und scheint Google nun nicht mehr warnen.

@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();

}

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top