【发布时间】:2013-08-10 04:28:25
【问题描述】:
关于这个问题的帖子有很多(javax.net.ssl.SSLPeerUnverifiedException: No peer certificate),但我没有找到任何适合我的帖子。
许多帖子(如this 和this)通过允许接受所有证书来“解决”这个问题,但当然,除了测试之外,这不是一个好的解决方案。
其他的似乎很本地化,不适合我。我真的希望有人对我缺乏一些见解。
所以,我的问题是:我正在通过 HTTPS 连接的只能通过本地网络访问的服务器上进行测试。通过浏览器拨打我需要的电话工作正常。没有抱怨证书,如果你检查证书,一切看起来都很好。
当我在我的 Android 设备上试用时,我收到了javax.net.ssl.SSLPeerUnverifiedException: No peer certificate
这是调用它的代码:
StringBuilder builder = new StringBuilder();
builder.append( /* stuff goes here*/ );
httpGet.setEntity(new UrlEncodedFormEntity(nameValuePairs));
ResponseHandler<String> responseHandler = new BasicResponseHandler();
// Execute HTTP Post Request. Response body returned as a string
HttpClient httpClient = MyActivity.getHttpClient();
HttpGet httpGet = new HttpGet(builder.toString());
String jsonResponse = httpClient.execute(httpGet, responseHandler); //Line causing the Exception
我的MyActivity.getHttpClient()代码:
protected synchronized static HttpClient getHttpClient(){
if (httpClient != null)
return httpClient;
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, TIMEOUT_CONNECTION);
HttpConnectionParams.setSoTimeout(httpParameters, TIMEOUT_SOCKET);
HttpProtocolParams.setVersion(httpParameters, HttpVersion.HTTP_1_1);
//Thread safe in case various AsyncTasks try to access it concurrently
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
schemeRegistry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
ClientConnectionManager cm = new ThreadSafeClientConnManager(httpParameters, schemeRegistry);
httpClient = new DefaultHttpClient(cm, httpParameters);
CookieStore cookieStore = httpClient.getCookieStore();
HttpContext localContext = new BasicHttpContext();
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
return httpClient;
}
任何帮助将不胜感激。
编辑
还只是提到我在另一个应用程序中遇到了其他 SSL 问题,但添加 SchemeRegistry 部分之前已为我解决了问题。
编辑 2
到目前为止,我只在 Android 3.1 上进行了测试,但无论如何我都需要它才能在 Android 2.2+ 上运行。我刚刚在我的 Android 标签(Android 3.1)上的浏览器上进行了测试,它抱怨证书。在我的电脑浏览器上很好,但在 Android 浏览器或我的应用程序中却不行。
编辑 3
原来 iOS 浏览器也抱怨它。我开始认为这是此处描述的证书链问题 (SSL certificate is not trusted - on mobile only)
【问题讨论】:
-
这个问题是由于 https m i 对吗??
-
是的,我通过 https 连接。我会更新问题