如何保护普通的socket通信?我写了一个Jabber客户端,它只能连接到专用的SSL端口(5223)(使用SSLSocket)。通常的方法是连接到Jabber标准端口5222并请求starttls
。我怎样才能做到这一点?
答案 0 :(得分:1)
我不完全确定您的要求,但您可以使用SSLSocketFactory.createSocket()方法在现有的普通(非安全)套接字上分层安全套接字。这是使用starttls之类的东西“升级”套接字的一种方法。但这是艰难的做事。几乎可以肯定,您的XMPP库将提供对此类功能的高级访问。
答案 1 :(得分: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);