确保基于节俭的沟通

时间:2014-08-07 19:18:14

标签: c++ security authentication rpc thrift

所以,我已经制作了一个基于节俭的程序,它有一个客户端和一个服务器,客户端可以很好地与服务器通信。现在,由于数据传输非常重要,我想要一些安全性。

所以,我想到了登录系统,但问题是我没有在服务器端存储任何类型的会话数据(我甚至都不知道,我应该存储什么,在所有客户端请求来来去去之后并且没有办法区分它们)。所以经过多次思考,这就是我提出的方法

  1. 使用随机数,我会在服务器启动时生成某种随机字符串
  2. 客户端将输入用户名和密码,将在服务器端使用PAM验证进行验证(只需阅读一些内容)。
  3. 如果经过验证,服务器只会将随机生成的字符串发送到客户端
  4. 客户端每次尝试执行RPC时都会将该字符串发送到服务器
  5. 如果经过验证,服务器将完成工作,否则返回一些错误代码
  6. 我能想到的可能问题

    目前,当服务器出现故障并且客户端处于某些RPC中时,它会给出一些错误消息,当服务器重新启动时,我们可以毫无问题地完成任务

    现在,如果服务器出现故障,则生成的字符串将不同。所以我将再次进行身份验证部分

    那么,您如何看待整个身份验证模式?有没有更好或更简单的方法?

    P.S:我没有使用任何类型的数据库。我在双方都使用C ++。我的客户端使用QT

1 个答案:

答案 0 :(得分:0)

免责声明 - 我对PAM的运作方式不太了解,所以我对这种方法只有一些高层次的问题。如果我误解了你方法的任何部分,我会事先道歉。

当您说要保护数据传输时,我觉得您希望拥有身份验证和保密,现在只需要一种身份验证方法。

例如,如果客户端C1正在向服务器进行身份验证(假设凭据未以明文形式发送),则服务器在步骤3中发送随机字符串。当其他人在网络上嗅探时会发生什么?流氓客户端是否可以发送随机字符串并对服务器执行RPC调用,冒充C1?如果用户名和密码以明文形式发送到服务器,网络上的某人是否也可以访问凭据?那么,随后发送的数据呢?它只是以thrift格式编码,可以被网络上的任何人解码,对吗?数据敏感吗?

如果是这样,我想建议使用PKI /证书。使用自签名证书必须没问题。如果您只希望客户端向服务器进行身份验证并证明它是合法的,则可以使所有客户端都显示其证书。证书基本上是由客户签署的该客户的公钥,该客户端为该客户端担保。客户端具有本地存储的私钥,永远不会离开客户端。现在,当客户端将证书提供给服务器时,服务器会查看谁签署了证书(CA)。如果它是服务器信任的CA,它可以直接发送随机字符串或仅使用客户端的公钥加密的thrift数据。客户端将能够使用其私钥进行解密,并且对于正在嗅探的其他人来说,它看起来像是随机字节。服务器将为每个客户端执行此操作,并且只需要存储其信任的证书颁发机构的名称。这可能是您的姓名和地址。您可以使用openssl在每个客户端上生成自签名证书。但这意味着您可以在每个客户端上进行其他设置工作。生成密钥对和证书。如果此约束适合您,您可以探索此方法。

相关问题