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