Java 客户端已知的客户端-服务器应用程序的加密和身份验证
我想编写一个安全的客户机-服务器应用程序,其中只有少数(比如说,五个)客户机通过TCP套接字与服务器交换数据。所有客户都是事先知道的,可以离线共享密钥等 我想要三件事:Java 客户端已知的客户端-服务器应用程序的加密和身份验证,java,sockets,ssl,encryption,cryptography,Java,Sockets,Ssl,Encryption,Cryptography,我想编写一个安全的客户机-服务器应用程序,其中只有少数(比如说,五个)客户机通过TCP套接字与服务器交换数据。所有客户都是事先知道的,可以离线共享密钥等 我想要三件事: 客户机需要确保他们与正确的服务器通信 服务器需要确保它只与这五个客户端通信 通信需要加密 如何实现这样的设置 我的第一个想法是支持SSL/TLS的套接字,但经过一段时间的思考,我觉得握手中的密钥交换是我真正不需要的。此外,整个证书颁发机构业务(需要处理自签名证书)似乎不合适 另一种选择似乎是进行常规套接字通信,并在两端执行加密/
我计划用Java编写,但实际上我认为我的问题与语言无关。我建议您使用TLS。它包含许多所谓的密码算法,这些密码算法是包含的密码算法的预定义组合,它们确保对等身份验证、非对称密钥交换、对称加密和消息身份验证。它们在现实世界中经受了战斗的考验 使用证书:
- 创建自签名CA证书,并使用它对所有客户端和服务器证书进行签名
- 将它们配置为仅接受使用CA签名的证书进行身份验证的对方
或者,如果您对证书感到不安,也有使用预共享密钥身份验证的密码套件(请查找PSK和SRP)。您会为CA变体推荐哪种密码套件,为预共享密钥变体推荐哪种密码套件?有很多建议。我喜欢(推荐的配置、优先级逻辑)。对于PSK,找到最好的类似套房。