开发包含社交网络登录的Android应用程序。 在这个问题之后,我删除了包含" WebViewClient.onReceivedSslError"的类。 但是当我在Google Play商店中上传应用时,它被拒绝,并出现以下错误。
"如何解决应用中的WebView SSL错误处理程序警报。"
我还使用该类在没有Intent的情况下在后台发送邮件。 这使用" SSL"和" TrustManagerFactory.X509"。这是拒绝的原因吗? 我想如果这是拒绝的原因,那么我可能会得到另一个错误,例如" 由于X509TrustManager的不安全实施而导致应用被Google Play商店拒绝。
寻求支持。提前谢谢。
这是我从Google Play收到的消息。
Hello Google Play Hello,
我们拒绝了VISApp,包名为com.avonmobility.visapp,因为它违反了我们的恶意行为或用户数据政策。如果您提交了更新,那么您之前的应用版本仍可在Google Play上使用。
此应用使用包含用户安全漏洞的软件,或允许在没有正确披露的情况下收集用户数据。
以下是您最近提交时检测到的问题列表和相应的APK版本。请尽快升级您的应用并增加已升级的APK的版本号。
漏洞APK版本 SSL错误处理程序 有关如何处理WebView SSL错误处理程序警报的详细信息,请参阅此Google帮助中心文章。
15 要确认您已正确升级,请将应用的更新版本提交给开发者控制台,并在五小时后再回来查看警告消失。
虽然这些漏洞可能不会影响使用此软件的每个应用程序,但最好是及时了解所有安全补丁程序。请确保更新应用中存在已知安全问题的所有库,即使您不确定问题是否与您的应用相关。
应用还必须遵守开发者分发协议和开发者计划政策。
如果您认为我们错误地做出了这一决定,请与我们的开发者支持团队联系。
最佳,
Google Play团队
答案 0 :(得分:0)
同样的问题我在你的项目中添加了这个创建一个类。
#include <stdio.h>
int main(int argc, char **argv) {
char code[1000];
char output[1000];
char ch;
int i = 0;
//store code in array
while ((ch = getchar()) != EOF) {
code[i++] = ch;
}
code[i] = '\0';
int index = 0;
i = 0;
//store removed comment code in output
while (code[i] != EOF) {
if (code[i] == '/' && code[i + 1] == '/') { //to remove single line comments
while (code[i] != '\n')
i++;
} else if (code[i] == '/' && code[i + 1] == '*') { //to remove multi line comments
i = i + 2;
while (code[i] != '*' && code[i + 1] != '/') {
i++;
}
i = i + 3;
} else { //store the rest of the code in output array
output[index++] = code[i++];
}
}
output[index] = '\0';
printf("%s", output);
}
}
答案 1 :(得分:0)
解决Google Play警告:WebViewClient.onReceivedSslError处理程序
并非始终强制执行handler.proceed();但你还必须包括handler.cancel();因此用户可以避免加载未说明的内容。
处理WebViewClient.onReceivedSslError处理程序的不安全实现
使用以下代码
webView.setWebViewClient(new SSLTolerentWebViewClient());
webView.loadUrl(myhttps url);
比
private class SSLTolerentWebViewClient extends WebViewClient {
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
AlertDialog.Builder builder = new AlertDialog.Builder(Tab1Activity.this);
AlertDialog alertDialog = builder.create();
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?";
alertDialog.setTitle("SSL Certificate Error");
alertDialog.setMessage(message);
alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// Ignore SSL certificate errors
handler.proceed();
}
});
alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
handler.cancel();
}
});
alertDialog.show();
}
}
您必须提醒用户使用SSL,以便Google允许您的应用执行此操作
答案 2 :(得分:0)
I also had SSLCertification issue at the time uploading singed apk.
you have to return true for all your trusted http hosts including 3rd party libraries http.
我在这里解决了我是如何解决这个问题的,对不起安全我没有放置链接的原始路径,这些Link帮助我。
TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
X509Certificate[] myTrustedAnchors = new X509Certificate[0];
return myTrustedAnchors;
}
@Override
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
@Override
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
}};
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession arg1) {
if (hostname.equalsIgnoreCase("demo.mysite.com") ||
hostname.equalsIgnoreCase("prod.mysite.com") ||
hostname.equalsIgnoreCase("22.2.202.22:3333") ||
hostname.equalsIgnoreCase("cloud.cloudDeveSite.net") ||
hostname.equalsIgnoreCase("11.2.222.22:2222") ||
hostname.equalsIgnoreCase("multispidr.3rdPartyLibrary.io")) {
return true;
} else {
return false;
}
}
});
提到所有出现SSLCertification问题的api,你也必须提到第三方api,你运行该代码时会得到错误的HTTP链接。