and*_*iri 7 ssl https android webview webviewclient
我onReceivedSslError在我的WebViewClient中实现了一个方法来正确处理webview中的无效https证书:
@Override
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
final AlertDialog.Builder builder = new AlertDialog.Builder(WebActivity.this);
String message = "SSL Certificate error.";
switch (error.getPrimaryError()) {
case SslError.SSL_UNTRUSTED:
message = "The certificate authority is not trusted.";
return;
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", (dialog, which) -> handler.proceed());
builder.setNegativeButton("cancel", (dialog, which) -> handler.cancel());
final AlertDialog dialog = builder.create();
dialog.show();
}
Run Code Online (Sandbox Code Playgroud)
当webview加载我的网页时,SslError.SSL_UNTRUSTED正在检测错误.但是,如果我在chrome(桌面或移动设备)中打开相同的网址,则证书会被视为有效且受信任:
为什么会这样?
对我来说,这是我试图访问的服务器的问题。它有一个损坏的中间证书链。是重定向服务器链断了。当链断开时,webview 无法解决,因为它不知道在哪里寻找正确的证书。
使用此工具检查常见的错误配置。请务必检查任何重定向。
Android 不支持权限信息访问
因此没有AIA Fetching
但是?!..它在浏览器中工作 是的,它在浏览器中工作,因为所有浏览器都带有一个中间列表,当证书链断开时可以使用。
解决方案:修复服务器上的证书链。
小智 5
即使对我来说,当证书在 android chrome 上抛出无效的 CN(SSL_IDMISMATCH) 时,它也会给出 SSL_UNTRUSTED。添加了网络安全配置,一切似乎都工作正常。对我来说,我安装了一个 user-ca,但 webview 没有选择它。
添加了这段代码,它允许我使用用户凭据中安装的 user-ca。
<network-security-config>
<base-config>
<trust-anchors>
<!-- Trust preinstalled CAs -->
<certificates src="system" />
<!-- Additionally trust user added CAs -->
<certificates src="user" />
</trust-anchors>
</base-config>
</network-security-config>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1955 次 |
| 最近记录: |