应用认证

时间:2011-12-29 17:07:45

标签: security authentication

  

可能重复:
  securing connection to php server

我正在编写一个移动应用程序来访问在线数据库(我对高级算法/协议比平台特定的实现更感兴趣)。

由于保持数据库更新需要大量工作,我只想限制对我的赞助应用程序的访问(我不希望其他应用程序免费使用我的数据库)。为此,我需要对应用程序本身进行身份验证,但我该怎么做呢?

如果我在应用程序中存储某种凭据,有人可能会尝试反汇编程序,检索数据并绕过我自己的应用程序编写自己的应用程序(即使我加密凭据,我仍然需要存储解密密钥... )

1 个答案:

答案 0 :(得分:0)

您要做的是使用经过相互身份验证的SSL,以便您的服务器只接受来自您应用的传入连接,而您的应用只会与您的服务器进行通信。

这是高级方法。创建自签名服务器SSL证书并在Web服务器上部署。您可以使用Android SDK附带的keytool(如果您正在使用Android;其他平台也有类似的工具)。然后创建一个自签名客户端,并将其作为资源在应用程序中包含的自定义密钥库中部署到您的应用程序中(keytool也会生成它)。将服务器配置为要求客户端SSL身份验证,并仅接受您生成的客户端证书。配置客户端使用该客户端证书来标识自己,并且只接受您在服务器上安装的那个服务器端证书。

如果您的应用以外的某人/某些人尝试连接到您的服务器,则不会创建SSL连接,因为服务器将拒绝未提供您的应用中包含的客户端证书的传入SSL连接。 / p>

这是一个循序渐进的答案,比这里所保证的要长得多。我建议分阶段执行此操作,因为网络上有关于如何在Android(服务器端和客户端)处理自签名SSL证书的资源。在我的书Application Security for the Android Platform中,还有一个完整的Android应用程序演练,由O' Reilly出版。

现在......你是对的,有权访问移动应用程序的人可以恢复与客户端证书关联的私钥。它将在BKS密钥库中加密,但您的应用程序需要提供密码才能打开该密钥库。因此,有人可以对您的应用进行逆向工程(在Android平台上相当容易),获取密码,获取密钥库,并解密它以恢复客户端私钥。您可以通过混淆应用程序以使密钥库密码更加困难,或者要求用户登录应用程序并使用该密码来获取密钥库等密码来缓解此问题......这实际上取决于级别您愿意为您的申请承担的风险。