【问题标题】:How to secure a client/ server socket communication如何保护客户端/服务器套接字通信
【发布时间】:2012-05-06 16:19:54
【问题描述】:

假设客户端和服务器应用在不同的机器上运行

今天:

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

【问题讨论】:

  • 受到什么保护?窃听?被恶意中介修改?请提供更多有关您尝试防御的威胁的详细信息。
  • @GregKopff 我更新了问题
  • 您所说的“以某种方式受到保护”到底是什么意思?如果您仍然要通过 SSL 发送它,为什么您认为您需要做任何事情?您知道这正是 SSL 已经在做的事情吗?

标签: java security sockets client-server


【解决方案1】:

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】:

    您可以使用基于asymmetricsymmetric 的加密。查看BouncyCastle 库。使用对称密钥加密,这就像每一方都有一个用于加密数据的共享密钥一样简单。

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

    【讨论】:

    • 您建议 BouncyCastle 而非 JRE 中包含的加密货币的原因是什么?
    • 原来的问题很模糊。我已经更新了我的答案。但是,在某些情况下,客户端可以更好地控制加密过程。客户端可能想要生成公钥-私钥对,将公钥传递给服务器,以便服务器可以在未来的连接中验证客户端。 Google TV Pairing Protocol 使用了这种方法。 developers.google.com/tv/remote/docs/pairing
    猜你喜欢
    • 2012-08-30
    • 2012-11-02
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多