我在Play商店中的一个应用程序最近收到了此提醒,我完全不知道应该采取什么措施来阻止此警报。请参考this。
我的应用中的方案:
应用程序中涉及支付网关,但付款是通过网络浏览进行的,我几乎可以肯定此提醒可能是这些网络视图的结果。
Google的见解:
就我搜索而言,我更频繁地遇到OnReceivedSslError
,甚至警报也明确指出我要正确处理这种方法。但我完全迷失了,因为我一开始并没有实施这种方法。
更深入的冲浪让我转到this,this和this too等链接。我在所有链接中发现的常见问题是它们都是指旧版本的android。但我使用的是我的minSDK 14,这是Android 4.0及更高版本。所以我又迷路了。我认为当我们在网络视图中使用https
时会出现此警报。
所以我的问题是
我是怎么突然遇到这个问题的?
这个应用程序已经在游戏商店超过6个月,这个警报出来了!绝对不知道发生了什么!!
如何重现此问题?
我已经尝试了很多方法来重现这个问题,我已经实现了here中给出的SSL方法:但似乎没有任何工作。
此问题会以任何方式影响我的付款或我的应用吗?
如何重现此问题以了解更多信息以及如何停止此警报?
我尝试了什么? :
由于我对较旧的Android版本有疑问,我设计了一个带有我的minSDK的模拟器,但即便如此,我的流程也没有进入该方法。
我怀疑:
是否会有一个不太可靠的SSL可以触发这个问题?
有关此问题的任何想法和见解都将非常有用。提前致谢。我只需要禁用该警报,就像那样简单。
答案 0 :(得分:0)
Google使用WebViewClients时似乎已升级了安全检查。在许多情况下 - 没有双关语 - 开发人员修复了这样的SSL问题:
@Override
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
handler.proceed();
}
我也有这个问题,看来Lint还没有实现这个检查。因此,重现起来非常困难。如果您想了解会发生什么,请创建一个自签名证书,使用此证书设置一个Web服务器,并将webview客户端连接到这个" untrusted"网络服务器。如果您没有处理onReceivedSSLError,您将收到错误,或者在webview中不会发生任何事情(默认情况下)。 它会影响您的付款吗?我想如果SSL证书不受信任,将会取消对url / api的请求。
上面的代码片段会忽略SSL错误,并提供MITM攻击的可能性。您是否尝试拦截请求,提醒用户并允许他们选择继续?
e.g。
@Override
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
//super.onReceivedSslError(view, handler, error);
AlertDialog.Builder builder = new AlertDialog.Builder(GroupsActivity.this);
builder.setTitle("Invalid/Untrusted certificate");
builder.setMessage("You're accessing a page with an untrusted or invalid certificate. Do you want to continue?");
builder.setNegativeButton("Cancel", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
handler.cancel();
Toast.makeText(GroupsActivity.this, "Request cancelled", Toast.LENGTH_LONG).show();
}
});
builder.setPositiveButton("Continue", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
handler.proceed();
}
});
}
答案 1 :(得分:0)
要正确处理SSL证书验证,只要服务器提供的证书符合您的期望,就更改您的代码以调用handler.proceed(),否则调用handler.cancel()。 onReceivedSslError()应通过Alert Dialog通知用户错误。
如果删除onReceivedSslError(),那么在SSL出错的情况下它会默认调用handler.cancel()。这也可以。