Как реализовать (SSL / TLS) защищенную связь через обычные сокеты Java - PullRequest
0 голосов
/ 16 января 2012

Как я могу защитить обычную связь через сокет? Я написал Jabber-клиент, который может подключаться только к выделенным портам SSL (5223) (используя SSLSocket). Обычным способом является подключение к стандартному порту Jabber 5222 и запрос starttls. Как мне этого добиться?

Ответы [ 2 ]

1 голос
/ 18 января 2013

Управление ожиданиями: я не пробовал это с Jabber. Но он работает с SMTP-сервером GMail, так что, возможно ...

Вот как обновить сокет до сокета SSL, где socket - исходное (не TLS) соединение:

SSLSocket sslSocket = (SSLSocket) ((SSLSocketFactory) SSLSocketFactory.getDefault()).createSocket(
                       socket, 
                       socket.getInetAddress().getHostAddress(), 
                       socket.getPort(), 
                       true);
InputStream inputStream = sslSocket.getInputStream();
OutputStream outputStream = sslSocket.getOutputStream();
// reads from the socket
Scanner scanner = new Scanner(inputStream);
// writes to the socket
OutputStream outputStream = new BufferedOutputStream(outputStream);
1 голос
/ 16 января 2012

Я не совсем уверен, что вы спрашиваете, но вы можете наложить защищенный сокет на существующий нормальный (незащищенный) сокет, используя метод SSLSocketFactory.createSocket () .Это один из способов «обновить» сокет, используя что-то вроде starttls.Но это делает вещи трудным путем.Почти наверняка ваша библиотека XMPP обеспечит высокоуровневый доступ к такого рода функциям.

...