Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 客户端已知的客户端-服务器应用程序的加密和身份验证_Java_Sockets_Ssl_Encryption_Cryptography - Fatal编程技术网

Java 客户端已知的客户端-服务器应用程序的加密和身份验证

Java 客户端已知的客户端-服务器应用程序的加密和身份验证,java,sockets,ssl,encryption,cryptography,Java,Sockets,Ssl,Encryption,Cryptography,我想编写一个安全的客户机-服务器应用程序,其中只有少数(比如说,五个)客户机通过TCP套接字与服务器交换数据。所有客户都是事先知道的,可以离线共享密钥等 我想要三件事: 客户机需要确保他们与正确的服务器通信 服务器需要确保它只与这五个客户端通信 通信需要加密 如何实现这样的设置 我的第一个想法是支持SSL/TLS的套接字,但经过一段时间的思考,我觉得握手中的密钥交换是我真正不需要的。此外,整个证书颁发机构业务(需要处理自签名证书)似乎不合适 另一种选择似乎是进行常规套接字通信,并在两端执行加密/

我想编写一个安全的客户机-服务器应用程序,其中只有少数(比如说,五个)客户机通过TCP套接字与服务器交换数据。所有客户都是事先知道的,可以离线共享密钥等

我想要三件事:

  • 客户机需要确保他们与正确的服务器通信
  • 服务器需要确保它只与这五个客户端通信
  • 通信需要加密
  • 如何实现这样的设置

    我的第一个想法是支持SSL/TLS的套接字,但经过一段时间的思考,我觉得握手中的密钥交换是我真正不需要的。此外,整个证书颁发机构业务(需要处理自签名证书)似乎不合适

    另一种选择似乎是进行常规套接字通信,并在两端执行加密/解密和签名。与基于gpg的电子邮件设置类似,我可以为服务器和每个客户端创建密钥对,并确保服务器具有所有客户端的所有公钥,每个客户端具有服务器的公钥。因为我可以将文件本地复制到每台机器上,所以可以假定此密钥交换是安全的

    或者我甚至应该使用对称加密,所有客户端和服务器都知道一个密钥

    我在网上能找到的几乎所有东西都是关于“经典”设置的,服务器通过证书颁发机构(即类似HTTPS的设置)向许多任意客户端进行身份验证


    我计划用Java编写,但实际上我认为我的问题与语言无关。

    我建议您使用TLS。它包含许多所谓的密码算法,这些密码算法是包含的密码算法的预定义组合,它们确保对等身份验证、非对称密钥交换、对称加密和消息身份验证。它们在现实世界中经受了战斗的考验

    使用证书:

    • 创建自签名CA证书,并使用它对所有客户端和服务器证书进行签名
    • 将它们配置为仅接受使用CA签名的证书进行身份验证的对方

    或者,如果您对证书感到不安,也有使用预共享密钥身份验证的密码套件(请查找PSK和SRP)。

    您会为CA变体推荐哪种密码套件,为预共享密钥变体推荐哪种密码套件?有很多建议。我喜欢(推荐的配置、优先级逻辑)。对于PSK,找到最好的类似套房。