En toute sécurité de fixation: javax.net.le protocole ssl.SSLPeerUnverifiedException: Pas de certificat homologue

Il y a des dizaines de posts sur ce problème (javax.net.le protocole ssl.SSLPeerUnverifiedException: Pas de certificat homologue) mais je n'ai pas trouvé quelque chose qui fonctionne pour moi.

De nombreux postes (comme cette, et cette) "résoudre" ce problème en permettant à tous les certificats d'être accepté, mais, bien sûr, ce n'est pas une bonne solution pour autre chose que des tests.

D'autres semblent très localisée et ne fonctionne pas pour moi. J'espère vraiment que quelqu'un a de la perspicacité que je manque.

Donc, mon problème: je suis en essais sur un serveur accessible uniquement via le réseau local, connexion via le protocole HTTPS. Faire l'appel que j'ai besoin à travers le navigateur fonctionne très bien. Pas de se plaindre de certificats et si vous vérifiez les certificats, il semble tout à fait bonne.

Quand je l'ai essayer sur mon appareil Android, je reçois javax.net.ssl.SSLPeerUnverifiedException: No peer certificate

Voici le code qui l'appelle:

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

Mon code pour 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;
}

Toute aide serait grandement appréciée.

Modifier

Aussi, pour ne mentionner que j'ai eu d'autres problèmes SSL avec une autre application, mais l'ajout de la SchemeRegistry partie fixe pour moi avant.

Edit 2

Jusqu'à présent, je ne l'ai testé sur Android 3.1, mais j'ai besoin que cela fonctionne sur Android 2.2+, peu importe. Je viens de tester sur le navigateur sur mon Android tab (Android 3.1) et il se plaint du certificat. C'est bien sur mon pc, navigateur, mais pas sur le navigateur Android ou dans mon application.

Modifier 3

S'avère iOS navigateur aussi se plaint-il. Je commence à penser que c'est une chaîne de certificats problème décrit ici (Certificat SSL n'est pas digne de confiance - les sur mobile uniquement)

InformationsquelleAutor Mike T | 2013-08-08