【问题标题】:POST request over HTTPs with Android使用 Android 通过 HTTPs 发出 POST 请求
【发布时间】:2013-02-01 08:23:34
【问题描述】:

我有一个大问题。我必须将我的应用程序中的一些参数发布到 URL。 但是,当我尝试在 WebView 对象中执行此操作时,它会给我一个异常,上面写着“不受信任的证书”(该异常是由覆盖 WebViewClient onReceivedSslError() 的方法引发的)。我怎样才能与服务器正确握手?你能给我一些建议吗?我快疯了……

真的,真的谢谢...

编辑:这就是我定义网络视图的方式

webView = (WebView) myFragmentView.findViewById(R.id.webView);
webView.setWebViewClient(new WebViewClient(){
        @Override
        public void onPageFinished(WebView view, String string){
            Log.debug(tag, "URL pagina terminata :"+webView.getUrl() );
            if(progress!=null) 
                if(progress.isShowing()){progress.dismiss();}
        }

        @Override
        public void onReceivedError(WebView view, 
                int errorCode,
                String description, 
                String failingUrl) {
            Log.error(tag, "ERROR:" + description );
           }

        @Override
        public void onReceivedSslError(WebView view,
                SslErrorHandler handler, SslError error) {
            super.onReceivedSslError(view, handler, error);
            Log.error(tag, "SSL Error received: "+ error.getPrimaryError());

            handler.proceed();
        }


    });

这就是我在 WebView 中创建 postRequest 的方式

webView.postUrl(url, EncodingUtils.getBytes(postParameters, "base64"));

这是 LogCat 输出:

SSL Error received: 3 - Untrusted Certificate

现在,谷歌搜索了一下,我发现需要检查证书的有效性并将钥匙串导入本地密钥库。但问题是我 0 不知道从哪里开始...... :)

【问题讨论】:

  • 能否请您分享您已有的代码并指出问题所在?
  • 我已经编辑了我的帖子,为您提供了更多信息。你需要别的东西吗? :) 真的谢谢...
  • 当您在浏览器中查看 URL 时是否收到不受信任的证书警告?
  • 是的,我尝试加载到浏览器中,但显示了不受信任的证书警告!如果我要接受它,那么我可以看到该页面...

标签: android post ssl https


【解决方案1】:

如果安全不是优先事项,你可以尝试在你的onReceivedSslError()中调用handler.proceed(),不要调用super方法。

如果安全是重中之重(应该是):

我自己没有为 webView 尝试过这个,但是尝试像这样设置你的证书: Android WebView setCertificate issues SSL problems

要获取实际证书,您可以将它们加载到浏览器中(通过在浏览器中打开 url 时接受警告)并从那里导出它们,或者您可以使用如下所述的 openssl 工具: http://blog.crazybob.org/2010/02/android-trusting-ssl-certificates.html

【讨论】:

  • 没有调用 super 效果很好,但我知道有一个安全漏洞。但这意味着与服务器的通信没有加密??
  • 通信是加密的,但不能保证服务器的身份验证。它容易受到中间人攻击。攻击者可以将他的自签名证书发送给你,你会很乐意接受它。
  • 是的,完美。你太棒了。你能推荐我如何检查证书吗?
猜你喜欢
  • 1970-01-01
  • 2018-08-03
  • 2021-05-19
  • 2011-08-17
  • 2013-10-22
  • 1970-01-01
  • 1970-01-01
  • 2012-10-31
  • 2013-06-07
相关资源
最近更新 更多