1

可能重复:
java中的网络通信加密

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

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

这个逻辑可以吗?有什么缺陷吗?会好还是使用 SSL 更好?基本上我关心的是重放攻击和中间人攻击。

4

1 回答 1

2

您所做的是描述 SSL 的基本思想,并且由于实施该方案可能会犯许多小错误,因此使用 SSL 会好得多。

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

如果您不想购买,您可以使用自签名证书,您可以在某些带外程序(例如与客户端应用程序一起分发)中信任该证书。

于 2012-10-27T21:51:59.107 回答