【发布时间】:2015-02-03 14:51:19
【问题描述】:
我想编写一个安全的客户端-服务器应用程序,其中只有少数(比如五个)客户端通过 TCP 套接字与服务器交换数据。所有客户端都是预先知道的,并且可以离线共享密钥等。
我想要三样东西:
- 客户端需要确保他们与正确的服务器通信
- 服务器需要确保它只与这五个客户端通信
- 通信需要加密
这样的设置应该如何实现?
我的第一个想法是启用 SSL/TLS 的套接字,但考虑了一段时间后,我觉得握手中的密钥交换是我并不真正需要的。此外,自签名证书需要解决的整个证书颁发机构业务似乎不合适。
另一种选择似乎是定期进行套接字通信,并在两端进行加密/解密和签名。与基于 gpg 的电子邮件设置类似,我可以为服务器和每个客户端创建密钥对,并确保服务器拥有所有客户端的所有公钥,并且每个客户端都有服务器的公钥。因为我可以将文件本地复制到每台机器,所以可以假定这种密钥交换是安全的。
或者我是否应该只使用对称加密,使用所有客户端和服务器都知道的单个密钥?
我在网上能找到的几乎所有内容都是关于“经典”设置的,在这种设置中,服务器通过证书颁发机构向许多任意客户端进行身份验证,即类似 HTTPS 的设置。
我打算用 Java 编写它,但实际上我认为我的问题与语言无关。
【问题讨论】:
标签: java sockets ssl encryption cryptography