Android - 与.NET WCF服务的Https连接提供SSLException:“无对等证书”

时间:2012-11-01 14:10:10

标签: android json wcf exception ssl

[求助] - 见下文

尝试通过HTTPS连接在Android 2.2中从启用REST的WCF服务获取一些JSON数据时,我遇到了异常。然后我发现了一些非常奇怪的事情。 在我的手机上运行应用程序时,它运行良好,它将获得漂亮的JSON数据。但是,当我在模拟器上运行应用程序时,它会在执行“httpclient.execute(request)”后立即崩溃,从而产生SLLException:无对等证书。 这特别奇怪,因为我的WCF服务有一个有效的RapidSSL签名证书(CA)。另外,我确保在IIS中不需要客户端证书。 (此功能也没有在UIThread上运行!它在一个单独的线程上运行。)

我的代码:

    public Object getJSON(String URL, HashMap<String, String> parameters, String METHOD, String TAG) {
    try {
        this.TAG = TAG;
        // Send GET request to <service>/METHOD?params
        //Target API(8) for AndroidHttpClient and Target API(5) for DefaultHttpClient
        AndroidHttpClient client = AndroidHttpClient.newInstance("Android");
        String params = "?";
        if(parameters != null){
            for (Entry<String, String> para : parameters.entrySet()) {
                params = params + (String)para.getKey() + "=" + (String)para.getValue() + "&";
            }
            params = params.substring(0, params.length() - 1);
            Log.i("U's n P's", params);//Username and password check
        }

        HttpGet request = new HttpGet(URL + METHOD + params);
        Log.i(TAG, request.getRequestLine().toString());
        request.setHeader("Accept", "application/json");
        request.setHeader("Content-type", "application/json");
        HttpResponse response = client.execute(request);//Crashes here
        HttpEntity responseEntity = response.getEntity();

        // Read response data into buffer
        char[] buffer = new char[(int)responseEntity.getContentLength()];
        InputStream stream = responseEntity.getContent();
        InputStreamReader reader = new InputStreamReader(stream);
        reader.read(buffer);
        stream.close();

现在我已经尝试过寻找解决方案,但基本上没有适合这种情况的解决方案。

[溶液]

我编辑主机文件后,我的模拟器正在运行快照,所以我不需要在DNS中设置我的服务。现在来了,因为我每次都通过快照运行它。该日期设置为2012年10月24日,模拟器中的时间为18:48。然后我意识到我验证证书的日期是2012年10月27日,时间是14:45。显然,“从互联网上获取时间”选项不适用于模拟器。这使我的httpclient抛出“无对等证书”异常,因为它在技术上没有在模拟器中有验证的证书。令人遗憾的是,当您使用关键字“android”或“https android wcf”搜索此异常的解决方案时,您只能获得与自签名证书相关的问题的人的结果。

TL; DR:显然未来验证的证书不会被接受。

1 个答案:

答案 0 :(得分:0)

如Arcshade所述。

我的模拟器正在运行快照,因为我编辑了hosts文件,所以我不需要在DNS中设置我的服务。现在来了,因为我每次都通过快照运行它。该日期设置为2012年10月24日,模拟器中的时间为18:48。然后我意识到我验证证书的日期是2012年10月27日,时间是14:45。显然,“从互联网上获取时间”选项不适用于模拟器。这使我的httpclient抛出“无对等证书”异常,因为它在技术上没有在模拟器中有验证的证书。可悲的是,当您使用关键字“android”或“https android wcf”搜索此异常的解决方案时,您只能获得与自签名证书相关的问题的人的结果。