Ho avuto anche lo stesso problema durante l'accesso ai servizi Web RESTful. E io con il seguente codice per risolvere il 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);
}
}
Ha funzionato per me. Provalo!!
Beh, la tua è la soluzione più pulita che riesca a pensare; c'è qualcosa di sbagliato in questo? – Piskvor
bene, si desidera solo disabilitare il controllo e farlo senza modifiche al codice. Normalmente hai molte proprietà per controllare le connessioni SSL, ma apparentemente non in questo caso ... – paweloque
beh, tu * potresti * fare un verificatore di nome host * factory * che controllerebbe la tua proprietà personalizzata e restituirà il verificatore fittizio "always-ok" se è impostato, o il verificatore predefinito se non; tuttavia, questo non risolve il problema, vero? – Piskvor