Проблема при доступе к веб-сайту с Java с использованием HTTPS (не доверенный сертификат)

#java #ssl #https

#java #ssl #https

Вопрос:

Я пытаюсь получить доступ к сайту с использованием HTTP из приложения Java. Поскольку приложение выполняется в среде разработки, соответствующий сертификат не является доверенным.

При использовании пакета javax.net.ssl я пытаюсь определить пользовательскую реализацию TrustManager, которая разрешает все, и передать ее во втором параметре метода init SSLContext, но это не работает.

Кто-нибудь заставляет работать что-то подобное? Большое спасибо за вашу помощь! Тьерри

Комментарии:

1. Используете ли вы -Djavax.net.debug=all (или auth), чтобы увидеть, что происходит? И как вы использовали свой недавно созданный контекст? И, конечно, поскольку сертификаты должны быть общедоступными, почему бы просто не доверять сертификату?

2. Большое спасибо за ваш ответ! При использовании подсказок по отладке я вижу, что: ОТПРАВИТЬ ПРЕДУПРЕЖДЕНИЕ TLSv1: фатальный, описание = certificate_unknow. На самом деле, я могу доверять сертификату, потому что это сервер разработки от сторонней компании.

Ответ №1:

Довольно легко реализовать TrustManager , который ничего не проверяет (работает как на стороне клиента, так и на стороне сервера):

 public class NoVerifyTM implements X509TrustManager
{
  void checkClientTrusted(X509Certificate[] chain, String authType) {
    /* Accept All */
  }

  void checkServerTrusted(X509Certificate[] chain, String authType) {
    /* Accept All */
  }

  X509Certificate[] getAcceptedIssuers() {
    return new X509Certificate[0]
  }
}
  

Чтобы использовать это TrustManager :

 SSLContext ctx = SSLContext.getDefault();
ctx.init(null, new TrustManager[] { new NoVerifyTM() }, null);
SSLSocketFactory sf = ctx.getSocketFactory();
  

Пожалуйста, обратите внимание, что (как сказал @hanwg) такой менеджер доверия следует использовать только для целей тестирования / прототипирования.

Комментарии:

1. Здравствуйте, большое спасибо за ваш ответ. К сожалению, это не решает мою проблему… На самом деле, я думаю, что есть еще кое-что, что нужно сделать. Возможно, на уровне менеджера ключей?

2. Можете ли вы предоставить нам какой-либо фрагмент кода, который вы написали, или исключение, которое вы получаете? Помочь будет намного проще 🙂

Ответ №2:

если вы доверяете сертификату, вам следует добавить его в хранилище доверия вашего сервера приложений. внедрение менеджера доверия, который не выполняет проверку сертификата, является уязвимостью в системе безопасности.

Комментарии:

1. Здравствуйте, большое спасибо за вашу помощь. Да, я согласен с вами! Это только для среды разработки…