确保Web服务的安全,以便只能由特定的Android应用程序调用

我们有一个只能由特定的Android应用程序调用的Web服务。 这个问题有什么解决办法?

要求是根本不使用authentication。

Solutions Collecting From Web of "确保Web服务的安全,以便只能由特定的Android应用程序调用"

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

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

这一步是一个更长的答案比这里保证。 我build议分阶段进行,因为networking上有资源可以处理Android中的自签名SSL证书,包括服务器端和客户端。 在O'Reilly出版的“Android平台的应用程序安全性”一书中,也有一个完整的介绍。


您通常会将该证书/私钥存储在某种types的密钥库中(如果您使用的是Android,则为KeyStore),并且该密钥库将被encryption。 该encryption基于密码,因此您需要(1)将密码存储在客户端的某处,或(2)在启动客户端应用程序时询问用户密码。 你需要做什么取决于你的用例。 如果(2)是可以接受的,那么你已经保护了你的凭证免受逆向工程,因为它将被encryption,并且密码将不会被存储在任何地方(但是用户将需要每次input)。 如果你做(1),那么有人可以逆向工程你的客户端,获得密码,获得密钥库,解密私钥和证书,并创build另一个客户端,将能够连接到服务器。

没有什么可以做的,以防止这一点; 你可以使你的代码难以逆向工程(通过混淆等),但是你不能做到这一点。 你需要确定你试图用这些方法缓解的风险是多less,值得做多less工作来缓解风险。

我想这将与正确的身份validation。 第一篇文章,我只是st was了这一个: 从android到web服务的安全通信希望它有助于=)

如果您完全确定此Web服务只需要被授权的应用程序/设备访问,请使用客户端SSL证书,并将服务器上的访问权限限制为仅具有授权证书的客户端。 这具有在任何时候强制SSL的奖金function,所以你不喜欢通过一个开放的渠道授权秘密。 下面是Apache的快速指南,但也可以使用nginx:

http://it.toolbox.com/blogs/securitymonkey/howto-securing-a-website-with-client-ssl-certificates-11500