También tuve el mismo problema al acceder a los servicios web RESTful. Y me su con el siguiente código para resolver el problema:
public class Test {
//Bypassing the SSL verification to execute our code successfully
static {
disableSSLVerification();
}
public static void main(String[] args) {
//Access HTTPS URL and do something
}
//Method used for bypassing SSL verification
public static void disableSSLVerification() {
TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
} };
SSLContext sc = null;
try {
sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HostnameVerifier allHostsValid = new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
};
HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
}
}
Me funcionó. ¡¡intentalo!!
Bueno, la suya es la solución más limpia que se me ocurre; ¿Hay algo malo con eso? – Piskvor
bueno, solo quiere deshabilitar el cheque y hacer esto sin cambios de código. Normalmente tiene muchas propiedades para controlar las conexiones SSL, pero aparentemente no en este caso ... – paweloque
bueno, usted * podría * hacer un verificador de nombre de host * fábrica * que verificaría su propiedad personalizada y devolvería el verificador simulado "siempre-ok" si está configurado, o el verificador predeterminado si no; sin embargo, esto realmente no resuelve el problema, ¿verdad? – Piskvor