Php 如何验证应用程序是否正在进行服务器调用?

Php 如何验证应用程序是否正在进行服务器调用?,php,android,security,Php,Android,Security,我有一个android应用程序,需要经常连接到服务器以检索或添加数据库数据。我需要验证对服务器的调用是否来自应用程序,因此我使用了这种方法:在服务器上验证的应用程序中包含一个硬编码字符串键。 但后来我意识到有像dex2jar这样的工具,它会显示我的所有代码(即使有proguard的一些模糊处理),特别是这个硬编码密钥 有没有更优雅、更安全的方法来验证服务器调用是否来自我的应用程序 我为英语感到抱歉,很明显我不是以英语为母语的人 如果只是您的客户端和服务器,您可以(而且应该)使用相互验证的SSL,

我有一个android应用程序,需要经常连接到服务器以检索或添加数据库数据。我需要验证对服务器的调用是否来自应用程序,因此我使用了这种方法:在服务器上验证的应用程序中包含一个硬编码字符串键。 但后来我意识到有像dex2jar这样的工具,它会显示我的所有代码(即使有proguard的一些模糊处理),特别是这个硬编码密钥

有没有更优雅、更安全的方法来验证服务器调用是否来自我的应用程序


我为英语感到抱歉,很明显我不是以英语为母语的人

如果只是您的客户端和服务器,您可以(而且应该)使用相互验证的SSL,而无需购买任何东西。您可以控制服务器和客户机,因此每个服务器和客户机应该只信任一个证书,一个属于另一个证书,而您不需要CA来实现此目的

这是高层次的方法。创建自签名服务器SSL证书并部署到web服务器上。为此,您可以使用Android SDK附带的keytool。然后创建一个自签名客户机,并将其部署到应用程序中的自定义密钥库中,该密钥库作为资源包含在应用程序中(keytool也将生成该资源)。将服务器配置为要求客户端SSL身份验证,并仅接受您生成的客户端证书。将客户端配置为使用该客户端证书来标识其自身,并仅接受服务器上为该部分安装的一个服务器端证书

一步一步地解决这个问题是一个比这里所保证的要长得多的答案。我建议分阶段进行,因为web上有关于如何在Android中处理自签名SSL证书的资源,包括服务器端和客户端。在我的书《Android平台的应用程序安全性》(由O'Reilly出版)中也有完整的介绍

您通常会将该证书/私钥存储在某种类型的密钥库(如果您使用Android,则为密钥库)中,并且该密钥库将被加密。该加密基于密码,因此您需要(1)将该密码存储在客户端的某个位置,或者(2)在用户启动客户端应用程序时要求用户输入密码。您需要做什么取决于您的用例。如果(2)是可接受的,那么您已经保护您的凭证不受反向工程的影响,因为它将被加密,并且密码不会存储在任何地方(但用户每次都需要键入密码)。如果您这样做(1),那么某人将能够对您的客户端进行反向工程,获取密码、密钥库、解密私钥和证书,并创建另一个能够连接到服务器的客户端


你无法阻止这一切;您可以使代码的逆向工程变得更加困难(通过模糊处理等),但不能使其不可能。您需要确定使用这些方法试图降低的风险是什么,以及需要做多少工作来降低风险。

如果只有您的客户机和服务器,您可以(也应该)使用相互验证的SSL,而无需购买任何东西。您可以控制服务器和客户机,因此每个服务器和客户机应该只信任一个证书,一个属于另一个证书,而您不需要CA来实现此目的

这是高层次的方法。创建自签名服务器SSL证书并部署到web服务器上。为此,您可以使用Android SDK附带的keytool。然后创建一个自签名客户机,并将其部署到应用程序中的自定义密钥库中,该密钥库作为资源包含在应用程序中(keytool也将生成该资源)。将服务器配置为要求客户端SSL身份验证,并仅接受您生成的客户端证书。将客户端配置为使用该客户端证书来标识其自身,并仅接受服务器上为该部分安装的一个服务器端证书

一步一步地解决这个问题是一个比这里所保证的要长得多的答案。我建议分阶段进行,因为web上有关于如何在Android中处理自签名SSL证书的资源,包括服务器端和客户端。在我的书《Android平台的应用程序安全性》(由O'Reilly出版)中也有完整的介绍

您通常会将该证书/私钥存储在某种类型的密钥库(如果您使用Android,则为密钥库)中,并且该密钥库将被加密。该加密基于密码,因此您需要(1)将该密码存储在客户端的某个位置,或者(2)在用户启动客户端应用程序时要求用户输入密码。您需要做什么取决于您的用例。如果(2)是可接受的,那么您已经保护您的凭证不受反向工程的影响,因为它将被加密,并且密码不会存储在任何地方(但用户每次都需要键入密码)。如果您这样做(1),那么某人将能够对您的客户端进行反向工程,获取密码、密钥库、解密私钥和证书,并创建另一个能够连接到服务器的客户端


你无法阻止这一切;您可以使代码的逆向工程变得更加困难(通过模糊处理等),但不能使其不可能。您需要确定您试图通过这些方法降低的风险是什么,以及需要做多少工作来降低风险。

+1,我正面临着同样的问题…+1,我正面临着同样的问题。。。