当使用下面版本的KitKat的WebView访问以下代码时,我可以绕过带有错误代码的https URL时绕过SSL错误

public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {

                    handler.proceed();
}

但不适用于KitKat浏览器。有什么想法要解决吗?

最佳答案

我最近也遇到了这个问题,该问题没有记录,但似乎在Android 4.4 KitKat上调用onReceivedSslError方法取决于SSL错误的类型。我检查了以下两种情况:

  • 如果SSL错误是由于自签名服务器证书引起的,则它会调用Android KitKat 4.4中的onReceivedSslError方法,就像在旧版本中一样。
  • 但是,如果SSL错误原因是证书链不正确(LogCat显示消息:“未能验证证书链,错误:java.security.cert.CertPathValidatorException:找不到证书路径的信任 anchor 。”,则onReceivedSslError为不会在KitKat中调用,就像在较早的Android版本中那样,因此在4.4中不能忽略或忽略该错误。这是我的情况,我不知道这是错误还是故意防止MITM攻击,但是我没有找到一种编程的方法来解决此问题。

    对我而言,潜在的问题是,Web服务器未公开完整的证书链,而仅公开了最后一个证书,只要设备已将所有证书存储在设备证书存储中,则该设备将负责验证整个链的责任。 Android设备并非如此。
    您可以通过以下方式确定这是否也是您的问题:

    a)使用在线证书检查器检查证书链,例如:http://www.digicert.com/help/

    b)使用openssl验证收到的证书链:
    openssl s_client -showcerts -connect:443
    您可以在那里看到证书链,该证书链应包含两个或多个证书,并且如果结果以类似以下内容结尾:
    验证返回码:21(无法验证第一个证书),
    您可能会遇到与我类似的问题。

    解决方案是修复Web服务器配置,以便服务器将完整的证书链公开给主机。

    关于ssl - 覆盖onReceivedSslError不适用于Android KitKat Web View ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22475761/

  • 10-10 07:42