Java如何使套接字连接安全?

Java如何使套接字连接安全?,java,sockets,encryption,cryptography,Java,Sockets,Encryption,Cryptography,我想在服务器和客户端之间建立一个安全套接字连接。 我的协议是: 客户端生成一个RSA密钥对,并将其公钥发送到服务器 服务器生成一个AES密钥,将该密钥与客户端的公钥加密,并将其发送给客户端 客户端使用私钥解密AES密钥 所有消息都使用AES密钥加密和解密 问题是: 该协议非常容易受到中间人攻击。攻击者可以轻松地将自己的公钥发送到服务器,并接收AES密钥。攻击者可以将服务器伪装成客户端,将客户端伪装成服务器 如何确保我的连接安全?正如Marc所说,使用TLS。TLS用于保护A和B之间的连接。这也是

我想在服务器和客户端之间建立一个安全套接字连接。 我的协议是:

  • 客户端生成一个RSA密钥对,并将其公钥发送到服务器
  • 服务器生成一个AES密钥,将该密钥与客户端的公钥加密,并将其发送给客户端
  • 客户端使用私钥解密AES密钥
  • 所有消息都使用AES密钥加密和解密
  • 问题是: 该协议非常容易受到中间人攻击。攻击者可以轻松地将自己的公钥发送到服务器,并接收AES密钥。攻击者可以将服务器伪装成客户端,将客户端伪装成服务器

    如何确保我的连接安全?

    正如Marc所说,使用TLS。TLS用于保护A和B之间的连接。这也是HTTPS安全的原因


    Java中的一个简短示例。请注意,使用了术语SSL—TLS过去是SSL,但该术语仍然可以互换使用。

    将TLS与公开签名证书一起使用,除非您有很好的理由不这样做。我不知道这是什么。。。你能解释一下这个解决方案吗?然后在提出你自己的协议之前请先阅读。这篇文章说我需要一个证书?这是什么?如何获得一个?如何在Java中实现所有这些?本文说我需要一个证书?如何获取证书?我想生成我自己的证书,因此我不必依赖JDKAL。因此本文描述了HTTPS连接,我需要一个没有HTTP的套接字连接。这很好,您应该这样做。您要查找的是自签名证书。尝试创建证书相对容易。然后,您需要将证书加载到。如果您遇到问题,请尝试遵循逐步指南。这是一个错误的答案。迪菲·赫尔曼没有使TLS对中间人(MITM)安全。正是TLS的身份验证框架使其对MITM安全(或不安全)。对于internet,这意味着证书颁发机构的系统,其密钥或多或少在TLS客户端中进行了硬编码。此CA模型并不完美,并且有记录在案的漏洞利用。该模型中的弱点直接转化为TLS对MITM的弱点。