Java客户端服务器安全通信



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

我正在设计客户端服务器应用程序。我希望整个会话被加密。我在考虑这样做的奇迹(使用RSA进行公钥加密,而AES-128进行对称加密):

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

这个逻辑还可以吗?有缺陷吗?会没事还是最好使用SSL?基本上,我关注的是重播攻击和MITM。

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

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

您可以使用一个自签名的证书,如果您不想购买,则可以信任一些带外的程序(例如使用客户端应用程序分发)。

最新更新