web-dev-qa-db-fra.com

Avertissement SSL de google play

J'ai eu l'avertissement de Google Play.

Comment puis-je gérer "la vulnérabilité du gestionnaire d'erreurs SSL" d'implémentation non sécurisée du gestionnaire WebViewClient.onReceivedSslError.

"Veuillez corriger cette vulnérabilité dès que possible et incrémenter le numéro de version de l'APK mis à niveau. Pour gérer correctement la validation du certificat SSL, modifiez votre code pour invoquer SslErrorHandler.proceed () chaque fois que le certificat présenté par le serveur répond à vos attentes et invoquez SslErrorHandler. .cancel () sinon. "

11
Vishal Chaudhari

J'ai reçu le même avertissement aujourd'hui et me dit que le problème Provient du kit de développement logiciel de l'un de mes réseaux publicitaires (InMobi, je songe vraiment à les laisser tomber car ils ont beaucoup d'informations frauduleuses et automatiques. rediriger les bannières, et maintenant ceci ...):

com.inmobi.commons.analytics.iat.impl.net.AdTrackerWebViewLoader$MyWebViewClient

Quelle est la classe concernée dans votre cas? S'il s'agit de l'une de vos propres classes, vous devrez lire la technique documentation et corriger votre implémentation.

Si, comme moi, vous n'êtes que la victime d'une de vos bibliothèques externes, contactez les développeurs pour leur demander de fournir une bibliothèque fixe (ou supprimez la bibliothèque).

9
Sébastien

Vous devez d’abord vérifier que vous utilisez correctement le gestionnaire WebViewClient.onReceivedSslError.

Si vous n'utilisez pas la bibliothèque WebViewClient ou si vous l'utilisez déjà correctement, le problème provient probablement d'une bibliothèque tierce. Vous pouvez d’abord utiliser cette commande linux dans le répertoire racine de votre projet pour identifier les bibliothèques qui pourraient être responsables du problème:

find . -name '*.jar' -exec zipgrep -i onreceivedsslerror {} \;

Cela listera les fichiers dans tous vos fichiers jar ayant la chaîne "OnReceivedSslError".

Après cela, vous pourrez vérifier si les recommandations de Google pour traiter la vulnérabilité sont respectées dans chaque fichier correspondant.

2
Stéphane

Si vous n'avez pas besoin de manipuler les éléments de onReceivedSslErr(WebView,SslErrorHandler,SslError), supprimez cette méthode pour éviter que Google Play warning.Otherwise ne l'exécute pas directement. Voici un exemple de @sakiM, Webview pour éviter une alerte de sécurité google play lors de l'implémentation de onReceivedSslError

@Override
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
    final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage(R.string.notification_error_ssl_cert_invalid);
    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();
}

Si la méthode onReceivedSslErr a été appelée par la 3ème bibliothèque, contactez simplement le fournisseur.

1
Yachao

Bonjour, voici la dernière solution pour résoudre votre problème. J'espère que ça va aider quelqu'un:

// COPIER COLLER CE CODE ET SUPPRIMER LA méthode onReceivedError ().

 /**
             * Notify the Host application that an SSL error occurred while loading a
             * resource. The Host application must call either handler.cancel() or
             * handler.proceed(). Note that the decision may be retained for use in
             * response to future SSL errors. The default behavior is to cancel the
             * load.
             *
             * @param view    The WebView that is initiating the callback.
             * @param handler An SslErrorHandler object that will handle the user's
             *                response.
             * @param error   The SSL error object.
             */
            @Override
            public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
                //final AlertDialog.Builder builder = new AlertDialog.Builder(OnlinePayment.this);
                String msg="";
                if(error.getPrimaryError()==SslError.SSL_DATE_INVALID
                        || error.getPrimaryError()== SslError.SSL_EXPIRED
                        || error.getPrimaryError()== SslError.SSL_IDMISMATCH
                        || error.getPrimaryError()== SslError.SSL_INVALID
                        || error.getPrimaryError()== SslError.SSL_NOTYETVALID
                        || error.getPrimaryError()==SslError.SSL_UNTRUSTED) {
                    if(error.getPrimaryError()==SslError.SSL_DATE_INVALID){
                        msg="The date of the certificate is invalid";
                    }else if(error.getPrimaryError()==SslError.SSL_INVALID){
                        msg="A generic error occurred";
                    }
                    else if(error.getPrimaryError()== SslError.SSL_EXPIRED){
                        msg="The certificate has expired";
                    }else if(error.getPrimaryError()== SslError.SSL_IDMISMATCH){
                        msg="Hostname mismatch";
                    }
                    else if(error.getPrimaryError()== SslError.SSL_NOTYETVALID){
                        msg="The certificate is not yet valid";
                    }
                    else if(error.getPrimaryError()==SslError.SSL_UNTRUSTED){
                        msg="The certificate authority is not trusted";
                    }
                }
                final AlertDialog.Builder builder = new AlertDialog.Builder(OnlinePayment.this);
                builder.setMessage(msg);
                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();

            }
0
Shahid Sarwar