所以我的服务器和客户端之间有这个TCP连接,任何人都可以连接到我的服务器。但我想确保客户端真正使用我的客户端应用程序,而不仅仅是伪造来自虚假TCP客户端的消息。如何做到这一点,检查连接是否真的来自我的游戏客户端?
谢谢!
修改 如果我要使用TLS,我可以解决这个问题吗?
答案 0 :(得分:2)
可能没有完整的问题解决方案,因为无论你做什么,另一方可能总是拿你的程序,在受监控的环境中运行它,操纵运行时数据并让它使用它的“安全”网络协议。由于客户端应用程序无法控制,因此您无法确定它是您自己的程序。
宝贝示例:我的应用程序运行您的应用程序并将数据回放到您的服务器,并将您的响应转发回应用程序。你怎么知道?
也就是说,使用SSL并将客户端的私钥硬编码到应用程序中可能是一种非常有前途的“99%”方法 - 您可以尝试使用一些技巧并使其难以找到(例如,看看Skype如何做到这一点) )。如果您还在程序中构建完整性检查,以确定是否有人在操作内存或调试您的程序,您可以尝试让潜在的对手更难一点。 (但请注意,您将始终 将私钥与您的应用程序一起发送,因此发现它并非真正安全。)
答案 1 :(得分:1)
其他人已经提出了有用的问题答案,但我会提出另一种方法。重新检查您的要求。
问自己为什么您想知道客户端程序的身份。是否可以信任您的客户端程序而不是您信任第三方客户端程序?
如果您需要信任已经发送给客户的软件的身份或完整性,我声称您的安全模型已损坏。一旦软件在客户端的PC上运行,即使您最初编写它,也应该认为它是邪恶的。
任何状态,任何命令,来自网络的任何数据都必须在依赖之前进行检查。
答案 2 :(得分:0)
我的默认回复是使用质询/响应身份验证。
连接后,从服务器向客户端发送随机数
然后,客户端使用散列/密钥/ ....响应消息计算并将其返回给服务器
如果响应与服务器计算相匹配,则您的真实性机会更好。请注意,您的客户的逆向工程师会将此方法置于欺诈之下。
答案 3 :(得分:0)
您可以使用公钥/私钥对来验证您是否是您所说的人。