我正在编写一对客户端/服务器应用程序。最近我遇到了一个问题:“如何防止别人编写自己的客户端应用程序并使用我们的服务器?”我真的没有答案,因为我迄今为止所做的所有安全通信都是为了确保客户端和服务器之间的通信是加密的。这将是一种不同的思路,即如何确保另一端的客户端应用程序是我想要交流的客户端应用程序(而不是假冒我的客户端应用程序)?
有没有人有任何合理的想法来解决这个问题?
有没有人有任何合理的想法来解决这个问题?
你无法保证这样的事情。服务器所看到的只是通信,如果不同的客户端应用程序与您的客户端应用程序完全相同,则无法看到差异。
为什么只有您自己的客户端应用程序可以与您的服务器通信很重要?如果涉及安全问题,那么您的安全设计是错误的。简单的事实是,服务器永远不能信任客户端应用程序,即使它是您自己的客户端应用程序。
如果不了解您的服务器功能和客户端身份,这个问题很难回答。但是有几个选项:
挑战/响应是一种方式。
在您的应用程序(客户端和服务器)中嵌入一个序列号和与该序列号唯一对应的密钥。然后,当客户端连接并发送其序列号时,服务器将使用已知密钥计算要发送到客户端的挑战。当客户端接收到挑战时,它必须用其内部密钥计算出响应。