From 06e80ad5418a04871aea024b09714ae33d74bd3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Sieradzki?= Date: Wed, 30 Sep 2015 21:56:14 +0200 Subject: [PATCH] Fixes #297: properly implement onReceivedSslError() method Validation of SSL certificates is still not ideal, as https://badssl.com/ shows, but further improvements require more investigation. --- .../browser/lightning/view/LightningView.java | 48 +++++++++++++++---- app/src/main/res/values-de/strings.xml | 1 - app/src/main/res/values-es/strings.xml | 1 - app/src/main/res/values-gr/strings.xml | 1 - app/src/main/res/values-hu/strings.xml | 1 - app/src/main/res/values-it/strings.xml | 5 +- app/src/main/res/values-ja/strings.xml | 1 - app/src/main/res/values-ko/strings.xml | 3 +- app/src/main/res/values-pl/strings.xml | 1 - app/src/main/res/values-pt/strings.xml | 1 - app/src/main/res/values-ru/strings.xml | 1 - app/src/main/res/values-sr/strings.xml | 1 - app/src/main/res/values-tr/strings.xml | 1 - app/src/main/res/values-zh-rCN/strings.xml | 1 - app/src/main/res/values/strings.xml | 8 +++- 15 files changed, 50 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/acr/browser/lightning/view/LightningView.java b/app/src/main/java/acr/browser/lightning/view/LightningView.java index 2c9a9e1..a14f65d 100644 --- a/app/src/main/java/acr/browser/lightning/view/LightningView.java +++ b/app/src/main/java/acr/browser/lightning/view/LightningView.java @@ -54,6 +54,8 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.net.URISyntaxException; +import java.util.ArrayList; +import java.util.List; import acr.browser.lightning.R; import acr.browser.lightning.app.BrowserApp; @@ -774,11 +776,47 @@ public class LightningView { } } + private List getAllSslErrorMessageCodes(SslError error) { + + List errorCodeMessageCodes = new ArrayList<>(); + + if (error.hasError(SslError.SSL_DATE_INVALID)) { + errorCodeMessageCodes.add(R.string.message_certificate_date_invalid); + } + if (error.hasError(SslError.SSL_EXPIRED)) { + errorCodeMessageCodes.add(R.string.message_certificate_expired); + } + if (error.hasError(SslError.SSL_IDMISMATCH)) { + errorCodeMessageCodes.add(R.string.message_certificate_domain_mismatch); + } + if (error.hasError(SslError.SSL_NOTYETVALID)) { + errorCodeMessageCodes.add(R.string.message_certificate_not_yet_valid); + } + if (error.hasError(SslError.SSL_UNTRUSTED)) { + errorCodeMessageCodes.add(R.string.message_certificate_untrusted); + } + if (error.hasError(SslError.SSL_INVALID)) { + errorCodeMessageCodes.add(R.string.message_certificate_invalid); + } + + return errorCodeMessageCodes; + } + @Override public void onReceivedSslError(WebView view, @NonNull final SslErrorHandler handler, SslError error) { + + List errorCodeMessageCodes = getAllSslErrorMessageCodes(error); + + StringBuilder stringBuilder = new StringBuilder(); + for (Integer messageCode : errorCodeMessageCodes) { + stringBuilder.append(" - ").append(mActivity.getString(messageCode)).append('\n'); + } + String alertMessage = + mActivity.getString(R.string.message_insecure_connection, stringBuilder.toString()); + AlertDialog.Builder builder = new AlertDialog.Builder(mActivity); builder.setTitle(mActivity.getString(R.string.title_warning)); - builder.setMessage(mActivity.getString(R.string.message_untrusted_certificate)) + builder.setMessage(alertMessage) .setCancelable(true) .setPositiveButton(mActivity.getString(R.string.action_yes), new DialogInterface.OnClickListener() { @@ -794,13 +832,7 @@ public class LightningView { handler.cancel(); } }); - AlertDialog alert = builder.create(); - if (error.getPrimaryError() == SslError.SSL_UNTRUSTED) { - alert.show(); - } else { - handler.proceed(); - } - + builder.create().show(); } @Override diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index f30e7d9..c332fc1 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -123,7 +123,6 @@ Open Source-Lizenzen Suche nach Werbung blockieren - Das Zertifikat dieser Webseite ist nicht vertrauenswürdig. Trotzdem fortsetzen? Formularneuzustellung Daten erneut senden? \nMeine Position verwenden? diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index b6c61a0..1503551 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -106,7 +106,6 @@ Licencias de código abierto (open source) Buscar Bloquear anuncios - El certificado del sitio no es de fiar. ¿Continuar de todas maneras? Resubir el formulario ¿Quieres mandar los datos de nuevo? \n¿Quieres usar tu geolocalización? diff --git a/app/src/main/res/values-gr/strings.xml b/app/src/main/res/values-gr/strings.xml index 55ab54d..fc5a410 100644 --- a/app/src/main/res/values-gr/strings.xml +++ b/app/src/main/res/values-gr/strings.xml @@ -107,7 +107,6 @@ Άδειες ανοιχτού κώδικα Αναζήτηση για Μπλοκάρισμα διαφημίσεων - Το πιστοποιητικό δεν είναι αξιόπιστο. Συνέχεια παρ\'όλα αυτά; Επαναυποβολή φόρμας Θα θέλατε να ξαναστείλετε τα στοιχεία; \nΘα θέλατε να χρησιμοποιήσετε την τοποθεσία σας; diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 5c03fb8..39d13db 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -123,7 +123,6 @@ Nyílt forráskódú licencek Keresés Reklámok blokkolása - Az oldal tanusítványa nem megfelelő.Folytatja mindenképpen? Űrlap újraküldése Szeretnél újból elküldi az adatokat? \nSzeretné használni a saját helyét? diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index a547cea..f8d4205 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -1,10 +1,10 @@