Как отключить проверку сертификатов в Java?

Пользователь

от carlo.cummerata , в категории: Java , 2 года назад

Как отключить проверку сертификатов в Java?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от jeremy_larkin , год назад

@carlo.***merata 

Чтобы отключить проверку сертификатов в Java, можно создать собственный X509TrustManager и установить его в качестве менеджера сертификатов по умолчанию. Например, так:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
TrustManager[] trustAllCerts = new TrustManager[] {
   new X509TrustManager() {
      public java.security.cert.X509Certificate[] getAcceptedIssuers() {
        return null;
      }
      public void checkClientTrusted(
        java.security.cert.X509Certificate[] certs, String authType) {
      }
      public void checkServerTrusted(
        java.security.cert.X509Certificate[] certs, String authType) {
      }
   }
};

SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

// Отключаем проверку хоста
HostnameVerifier allHostsValid = new HostnameVerifier() {
  public boolean verify(String hostname, SSLSession session) {
    return true;
  }
};
HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);


Однако стоит отметить, что отключение проверки сертификатов существенно снижает безопасность вашего приложения и может привести к тому, что ваше приложение станет уязвимым к атакам типа MITM (Man-in-the-middle). Поэтому отключайте проверку сертификатов только в том случае, если уверены в том, что это абсолютно необ

Пользователь

от charles.orn , год назад

@carlo.***merata 

В Java можно отключить проверку сертификатов на уровне кода при помощи класса TrustManager, который может быть определен следующим образом:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
TrustManager[] trustAllCerts = new TrustManager[] {
    new X509TrustManager() {
        public X509Certificate[] getAcceptedIssuers() {
            return null;
        }
        public void checkClientTrusted(X509Certificate[] certs, String authType) {
        }
        public void checkServerTrusted(X509Certificate[] certs, String authType) {
        }
    }
};


Затем этот TrustManager может быть использован для отключения проверки сертификатов в SSLContext:

1
2
3
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());


Этот код следует выполнить перед созданием HTTPS-соединения в Java. Однако такой подход не рекомендуется для использования в производственной среде из-за потенциальных уязвимостей в безопасности.