2011-08-22 5 views
1

В настоящее время я тестирую воды SSL и новичок в материалах SSL. В рамках моих исследований я столкнулся с двумя различными реализациями SSL в пространстве Java.Какую версию SSL я использую?

Прежде всего, позвольте мне изложить мое требование, которое очень просто, мне просто нужен процесс отправки данных по URL-адресу с помощью https.

Среди двух решений первая из них - это чистая реализация Java (с использованием только основных классов Java), а другая использует HTTP-клиент Apache, чтобы сделать это http.

Первоначально, в рамках моего тестирования, я получил бы позорное исключение «неспособное найти правильный путь сертификации к запрашиваемой цели», и это я понял, когда сертификат (полученный с сервера) не является частью Хранилище ключей Java. Как только я добавлю сертификат в хранилище Java Key, приложение прекрасно работает в обоих случаях. Однако в моем использовании HTTPClient я заметил использование SSLSocketFactory.

Когда я тестировал HttpClient со следующим кодом,

HttpClient httpClient = new HttpClient(); 
     PostMethod postMethod = new PostMethod(target); 
     postMethod.setQueryString("someQueryString"); 

     try { 
      httpClient.executeMethod(postMethod); 
      System.out.println("Response code: " + postMethod.getStatusLine()); 



      BufferedReader in = new BufferedReader (new InputStreamReader(postMethod.getResponseBodyAsStream())); 
      String temp; 
      while ((temp = in.readLine()) != null){ 
       response += temp + "\n"; 
      } 
      temp = null; 
      in.close(); 
      System.out.println("Server response:\n'" + response + "'"); 

     } catch (HttpException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     }finally{ 
      postMethod.releaseConnection(); 
     } 

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

Если мой анализ верен, какая реализация лучше?

  • Лучше всего вручную установить сертификат? Каковы недостатки такого подхода? и истечет срок действия сертификата? Если это произойдет, мне нужно будет снова установить новый сертификат?
  • Или мне нужно автоматизировать всю функциональность добавления хранилища ключей с помощью SSLSocketFactory?

Ваши данные были бы весьма полезными. Спасибо.

ответ

2

Вы не должны этого делать. Для этого существуют существующие решения.

From the docs:

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

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

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

  • AuthSSLProtocolSocketFactory может использоваться для необязательного принудительного использования аутентификации . Это самая гибкая реализация фабрики протокольных сокетов .Он позволяет настраивать большинство, если не всех, аспектов аутентификации SSL.

+0

hmm, насколько я знаю, мне не нужна настройка SSL. Когда я попытался использовать HTTPClient из коробки, единственной ошибкой, которую я получил, было «не удалось найти допустимый путь сертификации для запрошенной цели», который я разрешил, сделав сертификат сервера частью хранилища Java-ключей. Так будет ли эта реализация наилучшим вариантом для меня? – Seagull

1

я наткнулся на двух различных реализаций SSL в Java пространстве.

Нет, вы этого не сделали. Вы столкнулись со встроенным JSSE и некоторыми вещами, которые Apache построил вокруг. Сообщение «неспособное найти допустимый путь сертификации к запрашиваемой цели», например, поступает от JSSE, действительно от JCE.

Единственная другая реализация самого JSSE, о которой я знаю, находится в IBM JVM.