验证智能手机应用程序(如 Android)的不同方法

Posted

技术标签:

【中文标题】验证智能手机应用程序(如 Android)的不同方法【英文标题】:Different ways to authenticate smartphone application like Android 【发布时间】:2012-02-15 09:55:53 【问题描述】:

我正在寻找不同的方法来验证客户端,如 android、iphone、windows 和黑莓应用程序,以及哪一种更好以及为什么

根据我的研究,我知道两种验证客户端的方法 1. 嵌入在智能手机应用程序中的私钥,用于签署消息:问题在于黑客很容易获得私钥 2. 客户证书

还有其他方法可以对这些智能手机应用进行身份验证吗?哪一种最安全?

【问题讨论】:

这实际上是一种方法 - 客户端不是使用证书而是使用证书的私钥进行身份验证。 【参考方案1】:

您在此处列出的两个选项实际上是相同的。客户端证书实际上只是由某个实体签名的私钥/公钥对的公钥部分以及一些标识信息。

验证客户端的最佳方式是使用相互验证的 SSL。您可以在此处使用自签名证书,因此您无需从 CA 购买任何证书,假设您控制了所有您希望允许访问的客户端,并且您控制了它们将与之通信的服务器。这将确保您的客户端仅接收来自您的合法服务器的数据(为您的应用程序配置 SSL 系统以仅接受您的服务器正在使用的自签名证书)并且您的服务器仅接受来自您的授权客户端的数据(将您的服务器配置为仅访问您的应用程序中部署的自签名证书作为客户端身份验证的资源)。 O'Reilly 发布的Application Security for the Android Platform 中提供了有关如何在 Android 上执行此操作的完整分步概要。

您是正确的,因为您需要在客户端应用程序中嵌入一些秘密信息(私钥),攻击者将能够破坏它。您现在在 Android 中拥有的最佳解决方案是将证书和私钥放在您作为资源包含在应用程序 APK 中的密钥库中,并让您的应用程序在需要使用密钥时访问密钥库。这意味着您的应用程序将需要拥有 Keystore 的密码。因此,如何保护该密码变得很重要。您可以混淆您的代码,使攻击者更难确定该密码,但这只会减慢正在对您的应用程序进行逆向工程的确定攻击者。但是,不需要设备用户在每次想要使用您的应用程序时都输入该密码,这是您能做的最好的事情。如果您在设备上运行的客户端应用程序需要访问它存储的内容,那么有权访问该设备的人也将能够访问它。你所能做的一切都会让它变得更加困难。

【讨论】:

谢谢你非常详细的回答,作为完整解决方案的一部分,如果客户端证书被黑客入侵,你建议应该怎么做? 除了将新的客户端 APK 部署到您的授权客户端,然后将服务器配置为不再信任旧客户端证书之外,您无能为力。

以上是关于验证智能手机应用程序(如 Android)的不同方法的主要内容,如果未能解决你的问题,请参考以下文章

可以在 Google Play 上为 Android TV 和智能手机发布相同的应用程序

Android系统智能手机如何应用拖到桌面

如何用Android Studio获取SIM卡带字母的ICCID?

Android开发—智能家居系列:用手机对WIFI模块进行配置

如何分辨Android智能手机真假

Android车载系统开发兴起,谷歌能否在智能汽车上再造辉煌?