2012-04-25 142 views
4

假设客户端和服务器应用程序在不同的机器上运行如何保护客户端/服务器socket通信

今天:

// 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发送。

+0

受到什么保护?窃听?由恶意中介修改?请提供一些关于您试图防范的威胁的更多详细信息。 – 2012-04-25 22:46:28

+0

@GregKopff我更新了这个问题 – JAM 2012-04-25 22:50:19

+0

你的意思是“受到某种程度上的保护”究竟是什么意思?如果你打算通过SSL发送它,你为什么还认为你需要做任何事情?您是否知道这正是SSL已经做的事情? – EJP 2012-04-26 01:33:50

回答

11

该JDK provides an SSL socket实现,似乎是一个合适的地方开始。它使用简单。

本来,你可能有这样的代码:

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

2

您可以使用asymmetric或加密。看看BouncyCastle库。使用对称密钥加密,这将会像每一边都有一个用于加密数据的共享密钥一样简单。

根据您更新的答案,我同意您应该查看SSLSocket

+0

你建议BouncyCastle超过JRE中加密的原因是什么? – 2012-04-25 22:57:10

+2

原来的问题含糊不清。我已经更新了我的答案。但是,在某些情况下,客户端可以更好地控制加密过程。客户端可能希望生成公钥 - 私钥对,将公钥传递给服务器,以便服务器可以验证未来连接的客户端。 Google TV配对协议使用此方法。 https://developers.google.com/tv/remote/docs/pairing – Steve 2012-04-25 23:01:37