【问题标题】:Encryption and authentication for client-server application where clients are known客户端已知的客户端-服务器应用程序的加密和身份验证
【发布时间】:2015-02-03 14:51:19
【问题描述】:

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

我想要三样东西:

  1. 客户端需要确保他们与正确的服务器通信
  2. 服务器需要确保它只与这五个客户端通信
  3. 通信需要加密

这样的设置应该如何实现?

我的第一个想法是启用 SSL/TLS 的套接字,但考虑了一段时间后,我觉得握手中的密钥交换是我并不真正需要的。此外,自签名证书需要解决的整个证书颁发机构业务似乎不合适。

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

或者我是否应该只使用对称加密,使用所有客户端和服务器都知道的单个密钥?

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

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

【问题讨论】:

    标签: java sockets ssl encryption cryptography


    【解决方案1】:

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

    使用证书:

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

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

    【讨论】:

    • 您会为 CA 变体推荐哪种密码套件,为预共享密钥变体推荐哪种密码套件?
    • 有很多建议。我喜欢Mozilla guide(推荐配置,优先级逻辑)。对于 PSK,找到最好的类似套件。
    猜你喜欢
    • 1970-01-01
    • 2012-08-28
    • 2011-11-04
    • 2012-04-15
    • 1970-01-01
    • 2012-12-07
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多