Есть ли параметр Java для отключения проверки сертификата? - PullRequest
43 голосов
/ 12 января 2011

Я получил эту ошибку при попытке запустить приложение:

Sun.security.validator.ValidatorException: PKIX path validation failed: 
java.security.cert.CertPathValidatorException:  java.net.UnknownHostException:oscp.thawte.com

Приложение находится в закрытой сети и никогда не сможет получить доступ к oscp.thawte.com.Есть ли параметр Java, который может отключить это?

Ответы [ 6 ]

44 голосов
/ 12 января 2011

-Dcom.sun.net.ssl.checkRevocation=false

14 голосов
/ 12 января 2011

Не совсем настройка, но вы можете переопределить TrustManager и HostnameVerifier по умолчанию, чтобы принять что-либо.Не безопасный подход, но в вашей ситуации он может быть приемлемым.

Полный пример: Исправление проблемы с сертификатом в HTTPS

5 голосов
/ 31 января 2018

Используйте утилиту cli keytool из дистрибутива программного обеспечения java для импорта (и trust! ) необходимых сертификатов

Образец:

  1. От изменения директории до jre \ bin

  2. Проверить хранилище ключей (файл находится в каталоге jre \ bin)
    keytool -list -keystore .. \ lib \ security \ cacerts
    Введите пароль хранилища ключей: changeit

  3. Скачать и сохранить всю цепочку сертификатов с нужного сервера.

  4. Добавление сертификатов (перед тем как удалить файл «только для чтения» из файла «.. \ lib \ security \ cacerts») keytool -alias REPLACE_TO_ANY_UNIQ_NAME -import -keystore .. \ lib \ security \ cacerts -file "r: \ root.crt"

случайно нашел такой простой совет. Другие решения требуют использования InstallCert.Java и JDK

источник: http://www.java -samples.com / showtutorial.php? Tutorialid = 210

2 голосов
/ 25 января 2019

В дополнение к ответам выше.Вы можете сделать это программно, реализовав TrustManager:

TrustManager[] trustAllCerts = new TrustManager[] {
        new X509TrustManager() {
          public java.security.cert.X509Certificate[] getAcceptedIssuers() {
           return null;
          }
          @Override
          public void checkClientTrusted(X509Certificate[] arg0, String arg1)
           throws CertificateException {}

          @Override
          public void checkServerTrusted(X509Certificate[] arg0, String arg1)
            throws CertificateException {}
          }
     };

  SSLContext sc=null;
  try {
   sc = SSLContext.getInstance("SSL");
  } catch (NoSuchAlgorithmException e) {
   e.printStackTrace();
  }
  try {
   sc.init(null, trustAllCerts, new java.security.SecureRandom());
  } catch (KeyManagementException e) {
   e.printStackTrace();
  }
  HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
  // Create all-trusting host name verifier
  HostnameVerifier validHosts = new HostnameVerifier() {
  @Override
  public boolean verify(String arg0, SSLSession arg1) {
   return true;
  }
  };
  // All hosts will be valid
  HttpsURLConnection.setDefaultHostnameVerifier(validHosts);

Однако это не очень хорошая практика для производства.

Этот пример на Как отключить проверку SSL-сертификата в Java содержит служебный класс, который вы можете скопировать в свой проект.

1 голос
/ 08 августа 2018

На моем Mac, который, я уверен, я не позволю java где-либо, кроме определенного сайта, я смог использовать Preferences-> Java, чтобы открыть панель управления Java, и отключил проверку. Если DLink исправит их сертификат, я включу его снова.

Java control panel - Advanced

1 голос
/ 03 апреля 2014

Ответ, данный М.К., отлично работает:)

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

AxisProperties.setProperty("axis.socketSecureFactory","org.apache.axis.components.net.SunFakeTrustSocketFactory");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...