如何保护客户端/服务器套接字通信

4
假设客户端和服务器应用程序在不同的计算机上运行。
今天:
// Server will receive the request and cast it as needed
ProxyResponse message = (ProxyResponse) objStream.readObject();

// Update message with some content
...

// Sent it back to client
ObjectOutputStream oos = new ObjectOutputStream(toClient);
oos.writeObject(message);

我希望进一步加强保护数据发送的安全性。你会如何建议我着手处理?

我正在寻找一个例子,说明客户端和服务器之间传输的数据是如何加密和解密,并通过SSL发送的。


受到什么保护?窃听?恶意中间人的修改?请提供更多关于您试图防范的威胁的细节。 - Greg Kopff
“某种程度上受保护”是什么意思?如果你要通过SSL发送它,为什么认为需要做任何事情呢?你知道SSL已经做了这件事吗? - user207421
2个回答

12

JDK 提供了一个SSL套接字的实现,这似乎是一个合适的起点。它很容易使用。

最初,您可能有类似以下的代码:

final SocketFactory factory = SocketFactory.getDefault();
final Socket socket = factory.createSocket(host, port);

你只需要更改工厂:
final SocketFactory factory = SSLSocketFactory.getDefault();
final Socket socket = factory.createSocket(host, port);

同样适用于ServerSocketFactory

3
你可以使用非对称对称加密。看看BouncyCastle库。使用对称密钥加密,这只需要双方共享一个用于加密数据的密钥即可。
根据您更新的答案,我同意您应该研究SSLSocket

你为什么建议使用BouncyCastle而不是JRE内置的加密功能呢? - Greg Kopff
2
原始问题比较模糊。我已经更新了我的答案。然而,在某些情况下,客户端有更多的控制加密过程是很有用的。客户端可能想要生成公私钥对,将公钥传递给服务器,以便服务器可以在未来的连接中验证客户端。这种方法被Google TV配对协议所使用。https://developers.google.com/tv/remote/docs/pairing - Steve

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接