Java SSL: как отключить проверку имени хоста

Есть ли способ для стандартных сокетов SSL Java отключить проверку имени хоста для соединений ssl с свойством? Единственный способ, который я нашел до сих пор, – написать верификатор имени хоста, который все время возвращает true.

Weblogic предоставляет эту возможность, можно отключить проверку имени хоста со следующим свойством:

-Dweblogic.security.SSL.ignoreHostnameVerify

    Должно быть возможно создать настраиваемый java-агент, который переопределяет значение по умолчанию HostnameVerifier :

     import javax.net.ssl.*; import java.lang.instrument.Instrumentation; public class LenientHostnameVerifierAgent { public static void premain(String args, Instrumentation inst) { HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() { public boolean verify(String s, SSLSession sslSession) { return true; } }); } } 

    Затем просто добавьте --javaagent:LenientHostnameVerifierAgent.jar в аргументы запуска java программы.

    В стандартных Java-сокетах SSL или действительно SSL нет проверки имени хоста, поэтому вы не можете установить ее на этом уровне. Проверка имени хоста является частью HTTPS (RFC 2818): вот почему она проявляется как javax.net.ssl.HostnameVerifier, которая применяется к HttpsURLConnection.

    У меня также была такая же проблема при доступе к веб-службам RESTful. И я их с приведенным ниже кодом, чтобы решить проблему:

     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); } } 

    Это сработало для меня. попробуй!!

    Давайте будем гением компьютера.