javax.net.ssl.SSLPeerUnverifiedException: No hay certificado de igual mientras trabajo con la API de Google Place en Android [duplicado]
Esta pregunta ya tiene una respuesta aquí:
Android: Haciendo Https Solicitud 2 respuestasMe enfrento a una javax.net.ssl.SSLPeerUnverifiedException: no hay excepción de certificado de igual cuando se trabaja con Google Place Api en el emulador de Android. A continuación se muestra mi url:
https://maps.googleapis.com/maps/api/place/search/json?&location=28.632808,77.218276&radius=1000&sensor=false&key=AIzaSyC3y3fOMTqTkCjNNETQTCKustG7BRk_eVc
cuando simplemente pego la url en la barra de direcciones del navegador, simplemente le da a Json cadena. Por lo tanto, creo que no hay necesidad de ninguna autenticación de certificado.
Después de hacer tantas búsquedas en Google y dedicar 2 o 3 días, he usado la clase SSLSocketFacory de org.apache.http.conn.ssl.SSLSocketFactory para evitar el error del certificado de igual.
abajo está mi código:
public static HttpClient wrapClient(HttpClient base) {
try {
SSLContext ctx = SSLContext.getInstance("TLS");
X509TrustManager tm = new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] xcs, String string) throws CertificateException {
}
public void checkServerTrusted(X509Certificate[] xcs, String string) throws CertificateException {
}
public X509Certificate[] getAcceptedIssuers() {
return null;
}
};
X509HostnameVerifier verifier = new X509HostnameVerifier() {
public void verify(String string, SSLSocket ssls) throws IOException {
}
public void verify(String string, X509Certificate xc) throws SSLException {
}
public void verify(String string, String[] strings, String[] strings1) throws SSLException {
}
public boolean verify(String string, SSLSession ssls) {
return true;
}
};
ctx.init(null, new TrustManager[]{tm}, null);
SSLSocketFactory ssf = new SSLSocketFactory(ctx);
ssf.setHostnameVerifier(verifier);
ClientConnectionManager ccm = base.getConnectionManager();
SchemeRegistry sr = ccm.getSchemeRegistry();
sr.register(new Scheme("https", ssf, 443));
return new DefaultHttpClient(ccm, base.getParams());
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
Estoy usando Android APi 16, y cuando usé el constructor SSLSocketFactory (SSLSocketContext), eclipse me da un error de cumplimiento, así que busqué mucho y descargué el archivo jar que tiene SSLSocketFactory (SSLSocketContext), que es el archivo "httpclient-4.1.1.jar". Y también puse el orden de ese jar en la ruta de compilación del proyecto, he establecido la prioridad más alta. Ahora recibo la siguiente advertencia:
VFY:unable to resolve direct method 4253:Lorg/apache/http/conn/ssl/SSLSocketFactory.<init>
Y siguiendo el largo rastro de error causado por
java.lang.NoSuchMethodError : org.apace.http.conn.ssl.SSLSocketFactory.<init>
Por favor, ayúdame, no sé dónde me equivoco.