【问题标题】:Android Exception(Not trusted server certificate) : https XML request with server authenticationAndroid 异常(不受信任的服务器证书):带有服务器身份验证的 https XML 请求
【发布时间】:2012-05-05 00:21:48
【问题描述】:

在我的 android 应用程序中,我必须读取存储在服务器中的 XML 文件。由于这是一个安全网页[SSL(https)],要访问 XML 文件所在的位置(https://serverAddress/path/),通常需要用户名/密码验证

以下是我用来读取和获取 XML 流的代码。但是当它试图执行HttpResponse httpResponse = httpClient.execute(httpGet); 语句时总是会出现异常。异常说Not trusted server certificate。

还在Manifest文件中添加了互联网访问权限<uses-permission android:name="android.permission.INTERNET" />

如果 XML 文件存储在不需要任何身份验证的地方,那么它可以正常工作。我到处搜索,但没有找到任何可以做到这一点的例子。如果有人可以指导这个过程,我将不胜感激。提前谢谢...!!!!

   try
   {
         Log.v("State","Started...");

         HttpClient httpClient = new DefaultHttpClient();
         HttpGet httpGet = new HttpGet("https://serverAddress/path/MyXMLFile.xml");
         httpGet.addHeader(BasicScheme.authenticate(new UsernamePasswordCredentials("username", "password"),HTTP.UTF_8, false));
         HttpResponse httpResponse = httpClient.execute(httpGet);
         InputStream xmlInputStream = httpResponse.getEntity().getContent();
         Toast.makeText(getApplicationContext(), this.convertStreamToString(xmlInputStream), Toast.LENGTH_LONG).show();

         Log.v("State","Finish...");
    }
    catch(Exception e)
    {
        Log.v("State",e.getMessage().toString());
    }

【问题讨论】:

    标签: java android xml httpclient inputstream


    【解决方案1】:

    这不是http 问题,而是https - 您正在使用安全连接。我也遇到了很多麻烦。作为一种快速修复,您可以让您的客户使用此 irreplaceable post 信任所有证书。

    稍后考虑只信任适当的证书。

    编辑:因为我知道 SO 用户有多挑剔。是的,信任所有证书是不好的做法,但这可以在 3 分钟内完成,您可以测试其余代码。永远不要忘记这是潜在的安全漏洞,您应该切换到只信任指定的证书。

    【讨论】:

    • 您好 Boris Strandjev,感谢您的快速回复。我经历了那个帖子,但并没有真正了解到底做了什么。有没有什么方法可以让我以简单的方式直接提供凭据并访问 XML?
    • @JibW 当我指向该帖子时,我实际上指的是最受欢迎的答案:stackoverflow.com/a/4837230/1108032。只需复制粘贴整个代码并使用它来构建您的客户端。我已经做过好几次了,它总是有效的。另外,它很容易申请。
    • 嗨,鲍里斯·斯特兰杰夫。我刚刚应用了它,但它仍然给出了这个异常[java.net.UnknownHostException]。我还尝试了在同一个 POST 中建议的 HttpURLConnection 方式,但这次是另一个异常 [java.net.SocketException: Permission denied]。我认为由于这是一个带有 SSL 证书的安全网页,因此它不允许在没有适当身份验证的情况下访问该位置以检索 Xml 流。
    • @JibW 实际上,如果我没记错的话,错误就改变了。之前不是Not trusted server certificate吗?
    • 当我按照 POST 建议的这种方法时,它给了我 java.net.UnknownHostException。 [但是在上面我展示的代码中给出了 javax.net.ssl.SSLException: Not trust server certificate]。而且我也不清楚,如果我们可以在没有适当身份验证的情况下访问受保护的资源,那么我们将能够访问任何资源并且它们将不再受到保护。
    猜你喜欢
    • 2012-02-26
    • 1970-01-01
    • 2015-10-19
    • 2014-11-29
    • 1970-01-01
    • 2020-11-14
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多