Какой класс следует использовать для создания TLS-соединения в java. Класс сокета или класс SSLSocket?

Я пытаюсь создать простой Java-клиент для подключения к порту 5223 сервера присутствия (Openfire). Документы сервера присутствия говорят мне, что этот порт поддерживает только безопасные соединения TLS.

Поэтому я пытаюсь подключиться к порту 5223, используя приведенный ниже код.

SSLSocketFactory factory=(SSLSocketFactory)SSLSocketFactory.getDefault();
SSLSocket socket= (SSLSocket)factory.createSocket("host",5223);
BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));
BufferedWriter writer =new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF-8"));
writer.write("some data");
writer.flush();
char r0[]= new char[600];
reader.read(r0);
System.out.println(r0);

Это работало нормально, и я мог видеть, что (в wireshark) данные, которые я отправил, а также полученный ответ, были зашифрованы.

Затем я попробовал приведенный ниже код

Socket socket=new Socket("host", 5223);
BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));
BufferedWriter writer =new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF-8"));
writer.write("some data");
writer.flush();
char r0[]= new char[600];
reader.read(r0);
System.out.println(r0);

Удивительно (для меня) это тоже работает. Единственная проблема в том, что вначале я получил неожиданный ответ размером 7 байт. Но когда я пропустил этот ответ, все остальные ответы, кажется, работают нормально, и я даже увидел, что данные зашифрованы (с помощью wireshark).

Я сбит с толку. Если класс Socket сам по себе может обеспечить защищенную связь, то зачем нам использовать класс SSLSocket.

Любая помощь приветствуется.


person Chinta    schedule 06.03.2014    source источник


Ответы (1)


  • Очевидно, что документация сервера неверна, говоря, что он поддерживает TLS только через этот порт, и
  • Ясно, что он использует функцию STARTTLS, с помощью которой вы начинаете с простого текстового соединения и можете обновить его до TLS, введя команду STARTTLS.
person user207421    schedule 07.03.2014
comment
Спасибо за ответ. Но я не отправлял команду запуска tls, и данные все еще кажутся зашифрованными. Как это возможно. - person Chinta; 10.03.2014