Для какой реализации SSL я иду? - PullRequest
1 голос
/ 23 августа 2011

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

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

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

Первоначально, как часть моего тестирования, я получал печально известное исключение "не удается найти действительный путь сертификации к запрошенной цели", и я понял, что это происходит, когда сертификат (полученный от сервера) не является частью Java магазин ключей. Когда я добавляю сертификат в хранилище ключей Java, приложение отлично работает в обоих случаях. Однако в моем использовании 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 ]

2 голосов
/ 23 августа 2011

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

Из документов :

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

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

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

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

1 голос
/ 23 августа 2011

Я встретил две разные реализации SSL в Java-пространстве.

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

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

...