Предупреждение SSL от google play

Получил предупреждение от игры Google.

Как я могу обработать «Уязвимость обработчика ошибок SSL» в отношении небезопасной реализации обработчика WebViewClient.onReceivedSslError.

«Пожалуйста, устраните эту уязвимость как можно скорее и увеличьте номер версии обновленного APK. Чтобы правильно обрабатывать SSL-сертификат, измените свой код, чтобы вызывать SslErrorHandler.proceed (), когда сертификат, представленный сервером, соответствует вашим ожиданиям и вызывает SslErrorHandler .cancel () в противном случае. "

Solutions Collecting From Web of "Предупреждение SSL от google play"

Я получил такое же предупреждение сегодня, и он сообщает мне, что проблема связана с SDK одной из моих рекламных сетей (InMobi, я действительно рассматриваю возможность их удаления, поскольку у них много мошеннических, авто-переназначающих баннеров, и теперь это…):

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

Что такое затронутый класс в вашем случае? Если это один из ваших собственных классов, вам нужно будет прочитать техническую документацию и исправить вашу реализацию.

Если, как и я, вы являетесь жертвой одной из ваших внешних библиотек, обратитесь к разработчикам, чтобы попросить их предоставить фиксированную библиотеку (или удалить библиотеку).

Сначала вы должны проверить, правильно ли используете обработчик WebViewClient.onReceivedSslError.

Если вы не используете библиотеку WebViewClient или если вы уже используете ее правильно, проблема, вероятно, исходит от сторонней библиотеки. Сначала вы можете использовать эту команду linux в корневом каталоге вашего проекта, чтобы определить, какие библиотеки могут нести ответственность за проблему:

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

Это приведет к отображению файлов внутри всех ваших файлов jar с строкой «OnReceivedSslError».

После этого вы можете проверить, соблюдаются ли рекомендации Google по устранению этой уязвимости в каждом согласованном файле.

Если вам не нужно обрабатывать вещи в onReceivedSslErr(WebView,SslErrorHandler,SslError) , просто удалите этот метод, чтобы избежать предупреждения о Google Play. В warning.Otherwise вы также не должны начинать его напрямую. Вот пример @sakiM, Webview избегает предупреждения безопасности из игры Google при реализации 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(); } 

Если метод onReceivedSslErr был вызван третьей библиотекой, обратитесь к поставщику.

Привет, это последнее решение для решения вашей проблемы. Надеюсь, это поможет кому-то:

// COPY PASTE ЭТОТ КОД И УДАЛИТЬ метод 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(); } 

Это может быть вызвано использованием сторонних библиотек, используемых в вашем приложении, включая open ssl. Это случилось в моем случае. Библиотека упоминается в предупреждении от Google. Я использовал следующую команду grep с включенной библиотекой

 $ unzip -p YourApp.apk | strings | grep "OpenSSL" 

Эта команда покажет длинный журнал, если есть открытая проблема ssl из-за этой библиотеки.

 +com.android.org.conscrypt.OpenSSLSocketImpl 7org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl OpenSSLDie DH_OpenSSL OpenSSL_add_all_ciphers OpenSSL_add_all_digests DSA_OpenSSL ECDSA_OpenSSL ECDH_OpenSSL UI_OpenSSL OpenSSL/%lx.%lx.%lx%s OpenSSL 1.0.1h 5 Jun 2014 %s(%d): OpenSSL internal error, assertion failed: %s OpenSSL DH Method OpenSSL CMAC method OpenSSL HMAC method OpenSSL EC algorithm OpenSSL RSA method OpenSSL DSA method OpenSSL ECDSA method OpenSSL PKCS#3 DH method OpenSSL ECDH method You need to read the OpenSSL FAQ, http://www.openssl.org/support/faq.html OpenSSL default OpenSSL default user interface OpenSSL 'dlfcn' shared library method SSLv2 part of OpenSSL 1.0.1h 5 Jun 2014 SSLv3 part of OpenSSL 1.0.1h 5 Jun 2014 TLSv1 part of OpenSSL 1.0.1h 5 Jun 2014 DTLSv1 part of OpenSSL 1.0.1h 5 Jun 2014 MD4 part of OpenSSL 1.0.1h 5 Jun 2014 MD5 part of OpenSSL 1.0.1h 5 Jun 2014 SHA1 part of OpenSSL 1.0.1h 5 Jun 2014 SHA-256 part of OpenSSL 1.0.1h 5 Jun 2014 SHA-512 part of OpenSSL 1.0.1h 5 Jun 2014 DES part of OpenSSL 1.0.1h 5 Jun 2014 libdes part of OpenSSL 1.0.1h 5 Jun 2014 AES part of OpenSSL 1.0.1h 5 Jun 2014 Big Number part of OpenSSL 1.0.1h 5 Jun 2014 ^RSA part of OpenSSL 1.0.1h 5 Jun 2014 Diffie-Hellman part of OpenSSL 1.0.1h 5 Jun 2014 Stack part of OpenSSL 1.0.1h 5 Jun 2014 lhash part of OpenSSL 1.0.1h 5 Jun 2014 EVP part of OpenSSL 1.0.1h 5 Jun 2014 ASN.1 part of OpenSSL 1.0.1h 5 Jun 2014 PEM part of OpenSSL 1.0.1h 5 Jun 2014 X.509 part of OpenSSL 1.0.1h 5 Jun 2014 RC2 part of OpenSSL 1.0.1h 5 Jun 2014 IDEA part of OpenSSL 1.0.1h 5 Jun 2014 CAMELLIA part of OpenSSL 1.0.1h 5 Jun 2014 EDSA part of OpenSSL 1.0.1h 5 Jun 2014 ECDSA part of OpenSSL 1.0.1h 5 Jun 2014 ECDH part of OpenSSL 1.0.1h 5 Jun 2014 RAND part of OpenSSL 1.0.1h 5 Jun 2014 CONF part of OpenSSL 1.0.1h 5 Jun 2014 CONF_def part of OpenSSL 1.0.1h 5 Jun 2014 TXT_DB part of OpenSSL 1.0.1h 5 Jun 2014 SHA part of OpenSSL 1.0.1h 5 Jun 2014 RIPE-MD160 part of OpenSSL 1.0.1h 5 Jun 2014 RC4 part of OpenSSL 1.0.1h 5 Jun 2014 :Blowfish part of OpenSSL 1.0.1h 5 Jun 2014 \CAST part of OpenSSL 1.0.1h 5 Jun 2014 OpenSSLDie DH_OpenSSL OpenSSL_add_all_ciphers OpenSSL_add_all_digests DSA_OpenSSL ECDSA_OpenSSL ECDH_OpenSSL UI_OpenSSL %s(%d): OpenSSL internal error, assertion failed: %s You need to read the OpenSSL FAQ, http://www.openssl.org/support/faq.html OpenSSL default user interface OpenSSL 'dlfcn' shared library method OpenSSL/%lx.%lx.%lx%s OpenSSL 1.0.1h 5 Jun 2014 OpenSSL DH Method OpenSSL CMAC method OpenSSL HMAC method OpenSSL EC algorithm OpenSSL RSA method OpenSSL DSA method OpenSSL ECDSA method OpenSSL PKCS#3 DH method OpenSSL ECDH method OpenSSL default SSLv2 part of OpenSSL 1.0.1h 5 Jun 2014 SSLv3 part of OpenSSL 1.0.1h 5 Jun 2014 TLSv1 part of OpenSSL 1.0.1h 5 Jun 2014 DTLSv1 part of OpenSSL 1.0.1h 5 Jun 2014 MD4 part of OpenSSL 1.0.1h 5 Jun 2014 MD5 part of OpenSSL 1.0.1h 5 Jun 2014 SHA1 part of OpenSSL 1.0.1h 5 Jun 2014 SHA-256 part of OpenSSL 1.0.1h 5 Jun 2014 SHA-512 part of OpenSSL 1.0.1h 5 Jun 2014 DES part of OpenSSL 1.0.1h 5 Jun 2014 libdes part of OpenSSL 1.0.1h 5 Jun 2014 AES part of OpenSSL 1.0.1h 5 Jun 2014 Big Number part of OpenSSL 1.0.1h 5 Jun 2014 ^RSA part of OpenSSL 1.0.1h 5 Jun 2014 Diffie-Hellman part of OpenSSL 1.0.1h 5 Jun 2014 Stack part of OpenSSL 1.0.1h 5 Jun 2014 lhash part of OpenSSL 1.0.1h 5 Jun 2014 EVP part of OpenSSL 1.0.1h 5 Jun 2014 ASN.1 part of OpenSSL 1.0.1h 5 Jun 2014 PEM part of OpenSSL 1.0.1h 5 Jun 2014 X.509 part of OpenSSL 1.0.1h 5 Jun 2014 RC2 part of OpenSSL 1.0.1h 5 Jun 2014 IDEA part of OpenSSL 1.0.1h 5 Jun 2014 DSA part of OpenSSL 1.0.1h 5 Jun 2014 ECDSA part of OpenSSL 1.0.1h 5 Jun 2014 ECDH part of OpenSSL 1.0.1h 5 Jun 2014 RAND part of OpenSSL 1.0.1h 5 Jun 2014 CONF part of OpenSSL 1.0.1h 5 Jun 2014 CONF_def part of OpenSSL 1.0.1h 5 Jun 2014 TXT_DB part of OpenSSL 1.0.1h 5 Jun 2014 SHA part of OpenSSL 1.0.1h 5 Jun 2014 RIPE-MD160 part of OpenSSL 1.0.1h 5 Jun 2014 Blowfish part of OpenSSL 1.0.1h 5 Jun 2014 \CAST part of OpenSSL 1.0.1h 5 Jun 2014 

Попробуйте использовать ту же команду для другого apk без этой библиотеки. Он покажет только две строки, как показано ниже.

 +com.android.org.conscrypt.OpenSSLSocketImpl 7org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl