我想编写一个安全的客户端 - 服务器应用程序,其中只有少数(例如五个)客户端通过TCP套接字与服务器交换数据。所有客户都是事先知道的,并且可以离线共享密钥等。
我想要三件事:
如何实现这样的设置?
我的第一个想法是支持SSL / TLS的套接字,但在考虑了一段时间之后,我觉得握手中的密钥交换是我真正不需要的。此外,需要解决自签名证书的整个证书颁发机构业务似乎不合适。
另一种选择似乎是定期进行套接字通信,并在两端进行加密/解密和签名。与基于gpg的电子邮件设置类似,我可以为服务器和每个客户端创建密钥对,并确保服务器具有所有客户端的所有公钥,并且每个客户端都具有服务器的公钥。因为我可以将文件本地复制到每台机器,所以可以假设这种密钥交换是安全的。
或者我是否应该使用对称加密,所有客户端和服务器都知道一个密钥?
我在网上找到的几乎所有东西都是关于" classic"设置服务器通过证书颁发机构(即类似HTTPS的设置)向许多任意客户端验证自身的设置。
我打算用Java编写它,但实际上我认为我的问题与语言无关。
答案 0 :(得分:1)
我建议你使用TLS。它包含许多所谓的cipher suites,它们是包含的加密算法的预定义组合,它们确保对等身份验证,非对称密钥交换,对称加密和消息身份验证。它们在现实世界中经过了久经考验。
使用证书:
或者,如果您对证书感到不安,还有密码套件使用预共享密钥验证(查找PSK和SRP)。