android - 保护 Web 服务,使其只能由特定的 Android 应用程序调用

标签 android security

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

要求是根本不使用身份验证。

最佳答案

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

这是高级方法。创建自签名服务器 SSL 证书并部署在您的 Web 服务器上。为此,您可以使用 Android SDK 中包含的 keytool。然后创建一个自签名客户端并将其部署在您的应用程序中作为资源包含在您的应用程序中的自定义 keystore 中(keytool 也会生成它)。将服务器配置为需要客户端 SSL 身份验证并且只接受您生成的客户端证书。将客户端配置为使用该客户端证书来标识自己,并且只接受您在服务器上为该部分安装的一个服务器端证书。

对此的分步回答比此处保证的要长得多。我建议分阶段执行此操作,因为网络上有关于如何在服务器端和客户端处理 Android 中的自签名 SSL 证书的资源。我的书中也有完整的演练,Application Security for the Android Platform , 由 O'Reilly 出版。


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

您无法阻止这种情况发生;您可以使代码的逆向工程变得更加困难(通过混淆等),但您不能让它变得不可能。您需要确定您尝试使用这些方法减轻的风险是什么,以及为减轻风险值得做多少工作。

关于android - 保护 Web 服务,使其只能由特定的 Android 应用程序调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9431801/

相关文章:

android - 为 RecyclerView 的 item 动态添加 View

android - 使用 GSON fromJson 方法将 JSONArray 转换为对象

windows - 我如何从 C++ 服务应用程序访问 Windows 登录(身份验证)API?

asp.net - *不*使用 asp.net 成员(member)资格提供程序是一个坏主意吗?

security - CakePHP安全组件黑洞登录(data[_Token][key]字段未生成)

javascript - 警告 : flattenChildren(. ..) 与 react-native Navigator 和 DrawerLayoutAndroid

android - 检查 Android Webview 时 Google Chrome Devtools 损坏

安卓磨损 : Programmatically stop my app's notifications from appearing on watch

sql - LINQ to NHibernate 是否容易受到 SQL 注入(inject)和其他影响原始 sql 的安全风险的影响

php - public_html 上面图片的存储和读取