服务器的客户端身份验证

时间:2010-10-01 08:24:02

标签: java authentication client-server

我有一个需要连接到服务器的java应用程序。它很简单,以确保服务器不使用SSL欺骗,但我似乎无法解决服务器如何验证客户端以确保请求仅来自可信方。只需要对第一次通信进行身份验证。在该通信步骤期间,客户端和服务器将交换一些将用于随后验证客户端的信息。

我能想到的一种方法是对应用程序进行数字签名,然后将应用程序的数字签名发送到服务器。服务器验证数字签名以验证客户端。现在我有几个问题:

  1. 有可能获得 应用程序的数字签名来自 在其内部。如果是,那怎么样? (我试过这个问题 互联网但找不到任何东西 这样做的方式)
  2. 是否可以使用其他方法提取此签名 一个HEX编辑器。如果这是已知的话 任何人都可以发送该签名 到服务器并欺骗客户端。
  3. 另外,如果我完全走错了,请告诉我。)

    编辑:“受信任的政党”是指“未经修改的客户”

1 个答案:

答案 0 :(得分:4)

  

另外,如果我是,请告诉我   完全走错了轨道:))

你是:)

您的目标是“确保请求仅来自可信方” - 如果“可信方”被解释为“可信用户”,这是全球数百万网站每天通过此解决的标准身份验证问题简单密码验证。如果您想获得花哨(并且不方便/昂贵),可以使用SSL client certificatesRSA tokens

但是,您似乎将“可信方”解释为“使用未经修改的客户端的可信用户”,其中“未修改”包括用户有意进行的修改。

好吧,别忘了。除非您让用户仅使用您提供的物理安全硬件,否则无法完成。根本不可能保护软件不被控制其执行环境的人任意操纵。由于加密和许可证要求,电影行业花费了数十亿美元,迫使新标准变得更加复杂和昂贵,并且疏远了许多试图这样做的客户,并且(反复)失败。

修改 似乎它根本不是关于客户端(如保护它免受修改,通常这意味着反盗版措施),它显然是关于控制对服务器的访问。在这种情况下,不要再浪费大脑时间思考客户。那不是你的问题。访问服务器是。因此,开始考虑协议,它如何验证客户端以及它将接受哪些请求。修复您的协议,以便“伪装成客户端”是一个非问题,因为合法客户端可能发送的请求不会被接受。