2012-01-15 58 views
0

如何保护普通套接字通信?我写了一个只能连接到专用SSL端口(5223)的Jabber客户端(使用SSLSocket)。正常的方法是连接到Jabber标准端口5222并请求starttls。我怎样才能做到这一点?如何通过普通Java套接字实现(SSL/TLS)安全通信

+0

你尝试过什么?而不是听起来很愚蠢,但你有没有检查他们是你试图连接到服务器的SSL服务器实施。我不使用jabber,所以我不知道。如果没有服务器运行SSL连接,那么您的SSL客户端是浪费时间! – 2012-01-15 22:24:05

+0

Google在talk.google.com上有5223个端口,但每个服务器中的大多数都为我们提供了传统的starttls方法。我不知道如何在请求启用TLS之后保护通信。 – Bijoy 2012-01-15 22:30:11

+0

在java中创建SSL套接字与验证类似于创建标准套接字。你能提供一些代码以及你所得到的错误信息吗? – 2012-01-15 22:32:15

回答

1

我不能完全确定你所问的,但你可以通过使用SSLSocketFactory.createSocket()方法层上的现有的普通(非安全)插座安全套接字。这是使用类似starttls的方式“升级”套接字的一种方法。但这是艰难的做法。几乎可以肯定,你的XMPP库将提供对这种功能的高级访问。

+0

好的。让我尝试一下。我正在尝试编写我自己的库。 – Bijoy 2012-01-15 22:51:58

+0

@Bijoy:你真的说你想要实现你自己的SSL/TLS库吗(即使JRE中有一个为你提供的:JSSE)?这有点像你的标题听起来像。不过,你可能也不会要求对SO,如果这是你真正想做的事,你只是经过的RFC(在这种情况下,运气好的话...)。如果您只想编写自己的XMPP库并将普通TCP套接字升级到SSL/TLS套接字,请使用Gregs的建议。 – Bruno 2012-01-15 23:45:57

+0

啊,对不起。通信错误,我完全想要编写我自己的XMPP库而不是SSL/TLS库。 – Bijoy 2012-01-16 04:39:01

1

期望管理:我没有用Jabber试过这个。但是,它的工作原理Gmail的SMTP服务器,所以也许......

这里是如何的插座升级到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);