关于这个问题有几十篇文章(javax.net.ssl.SSLPeerUnverifiedException:没有对等证书),但我没有找到任何适合我的东西。
许多帖子(如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 证书不受信任 - 仅在移动设备上)