【发布时间】:2017-02-26 12:03:11
【问题描述】:
对不起我的英语。我需要加载 url https,我有一些问题。当我尝试加载页面时,webView 给我错误
primary error: 3 certificate: Issued to: CN=my-site.com;
Issued by: CN=GeoTrust DV SSL CA - G3,OU=Domain Validated SSL,O=GeoTrust Inc.,C=US;
on URL: https://my-site.com/tutorial.php
如果我像这样创建自定义 WebView 客户端并重新定义方法 onReceivedSslError:
@Override
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
handler.proceed();
}
然后当我将这个应用程序加载到市场时,谷歌的人会说我:
Your APK has been rejected for containing security vulnerabilities, which violates the Malicious Behavior policy
我可以解决这个问题,请执行以下操作:
final AlertDialog.Builder builder = new AlertDialog.Builder(WebViewTutorials.this);
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?";
builder.setTitle("SSL Certificate Error");
builder.setMessage(message);
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();
finish();
}
});
final AlertDialog dialog = builder.create();
dialog.show();
但是对于这个应用程序显示用户弹出窗口是不可接受的 来自后端的人说我“这是你在客户端的问题”。我不知道我在做什么,需要显示用户 webView 页面但不显示带有警告的弹出窗口
【问题讨论】:
-
您不应忽略 SSL 错误,但服务器应改用公开信任且配置正确的证书。但是,由于服务器未知,因此无法说出当前证书/配置的确切问题。
-
您的服务器是否返回了 my-site.com 的完整证书链?使用 SSL Labs (ssllabs.com/ssltest/index.html) 等在线扫描仪进行检查。如果您有来自 GeoTrust 的域验证证书,则不必执行所有这些自定义 SSL 处理。