Java客户端服务器安全通信

时间:2012-10-27 21:39:31

标签: java sockets encryption client-server

  

可能重复:
  network communication encryption in java

我正在设计一个客户端服务器应用程序。我想要整个会话加密。我正在考虑以下前提(使用RSA进行公钥加密,使用AES-128进行对称加密):

客户端连接到服务器并发送“hello”消息。 服务器用它的公钥响应。 客户端生成128位AES密钥,并使用服务器的公钥对其进行加密。 应用程序协议的其余部分使用AES密钥加密。

这个逻辑好吗?有缺陷吗?它会好吗或使用SSL更好吗?基本上我关心的是重播攻击和mitm。

1 个答案:

答案 0 :(得分:2)

您正在做的是描述SSL的基本思想,并且由于您可以实施该方案存在许多微小错误,因此使用SSL会更好。

您的方案在描述时会有缺陷,因为您没有任何验证服务器公钥的方法。任何人都可以发送它。此外,您如何知道加密的AES密钥实际上是由客户端生成的?任何人都可以拦截公钥。这就是SSL(或现在的TLS)使用信任库和Diffie-Hellman以及其他技巧的原因。

如果您不想购买自签名证书,您可以使用自签名证书(例如,使用客户端应用分发)。