2012-01-15 2 views
0

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

+0

, что вы пробовали ? И не звучать глупо, но вы проверили, что это реализация сервера SSL на сервере, к которому вы пытаетесь подключиться. Я не использую jabber, поэтому не знаю. Если сервер не подключен к SSL для подключения, ваш клиент SSL будет пустой тратой времени! –

+0

У Google есть порт 5223 на talk.google.com, но большинство из всех серверов предоставляют нам традиционный метод starttls. Я не знаю, как защитить связь после запроса включить TLS. – Bijoy

+0

Создание SSL-сокета в java проверяет аналогично созданию стандартного Socket. Можете ли вы предоставить код вместе с сообщением об ошибке, которое вы получаете? –

ответ

1

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

+0

Хорошо. позвольте мне попробовать. Я пытаюсь закодировать свою собственную библиотеку. – Bijoy

+0

@Bijoy: вы действительно говорите, что хотите реализовать свою собственную библиотеку SSL/TLS (хотя в JRE: JSSE есть один из них)? Это немного похоже на ваше название. Тем не менее, вы, вероятно, не спросили бы об этом, если бы это было то, что вы действительно хотели сделать, вы бы просто прошли через RFC (в данном случае, удачи ...). Если вы просто хотите написать свою собственную библиотеку XMPP и обновить обычный сокет TCP до сокета SSL/TLS, используйте предложение Gregs. – Bruno

+0

А, Извините. Ошибка связи, я точно хочу создать собственную библиотеку XMPP, а не библиотеку SSL/TLS. – Bijoy

1

Управление ожиданиями: Я не пробовал это с 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); 
Смежные вопросы