【问题标题】:Https connections from Android WebView来自 Android WebView 的 Https 连接
【发布时间】:2014-01-23 15:12:32
【问题描述】:

我需要在我的应用程序内(在 Web 视图中)通过 https 加载一些页面。 我知道你能做到

@Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        Log.d("SSL", "ERROR "+ error);
        handler.proceed(); // Ignore SSL certificate errors
    }

但这最终会破坏首先使用 https 的目的,所以有什么正确的方法可以做到这一点,通过将客户端证书添加到 webview 链甚至设备链,以便我可以使用 SelfSigned 证书?

还有一个问题,handler.proceed();禁用加密。即,如果我使用此连接发送用户名,它将以计划形式发送吗?

注意:如果有人需要使上述解决方法更加“安全”,您可以检查错误对象中的域,并且只允许您的域测试 CN=my.domain.com

【问题讨论】:

    标签: android https webview


    【解决方案1】:

    为了使用任何未预装在设备上的证书,也许你可以去你的设备Settings -> Install from storage 来安装你的新证书。

    WebView 曾经提供setCertificate() 的接口,但在 API 级别 17 中已弃用,这可能意味着您现在无法从应用安装证书。

    【讨论】:

    • 感谢您的回复。如您所述,我尝试在设备级别(Galaxy S3)上安装证书,但它不起作用。我什至遵循了类似 5 的教程,以防我错过了证书格式或类似的东西。不幸的是,即使在浏览器中它仍然无法工作,并且正如一些教程中提到的那样,webview 没有读取该全局证书存储。我确实找到了该方法以及“这没有做任何有用的评论”。但如果我针对早期的 API,它是否仍然适用于所有设备?
    • 如果您询问 API setCertificate() 是否适用于所有设备,答案是否定的。顺便说一句。 "doing handler.proceed()" 不会禁用加密;它所做的只是告诉 SSL 层应用程序层可以使用未知证书(即它让 SSL 层相信证书是可以信任的)。
    • 嗯,不能在所有设备上工作很糟糕。尽管您提到忽略 SSL 错误并不会禁用加密,但我认为在这种情况下使用我在注释中编写的解决方法是可以的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-12
    • 2011-05-31
    • 2012-12-01
    • 2012-03-13
    • 1970-01-01
    相关资源
    最近更新 更多