2015-10-15 74 views
2

我正在慢慢讨论Android应用程序签名的主题,但是我了解的每一步都只会导致进一步的问题。什么我迄今了解(我要指出,我的最终目标是实现自动化的PhoneGap构建了一个无头Ubuntu的服务器上,所以我下面写的一切使用PhoneGap的CLI)了解Android应用程序认证

密钥库是公私密钥对的序列每个用自己的密码保护。整个密钥库也有自己的密码。 公开密钥IS证书嵌入到APK中。一个可以检查的APK使用的证书如下

  • 解压APK(这是​​所有的ZIP档案后)
  • 抓住META-INF/CERT.DSA文件
  • 的keytool -list -file /path/to/CERT.DSA显示证书指纹。

生成公私密钥对很容易。它甚至可以通过发出一个简单的

echo y | keytool -genkeypair -dname "cn=com.example, ou=OrgUnitName, o=Org Name, c=US" -alias ANY -keypass aliasPwd -keystore /path/to/keystore -storepass keyStorePwd -validity days 

自动化我建了一个释放 APK使用的PhoneGap,通过短信发送给自己的一个链接,donwloaded然后安装APK。我的手机给了我几个警告,但然后安装了我的APK。凉!。

但这让我想知道....我creaed第二别名

echo y | keytool -genkeypair -dname "cn=com.microsoft, ou=Microsoft Mobile, o=Microsoft, c=US" -alias msft -keypass msftPwd -keystore /path/to/keystore -storepass keyStorePwd -validity 9999 

我重建了APK这次与微软的别名,送自己一个链接,然后下载并安装它(我在这里跳过一些安装细节)。我的Android手机再次给了我几个警告,但似乎并不过分担心我的声称是微软。

我不明白。从我在Android世界读到的内容来看,通常使用自签名证书。所以我有完全的自由来伪装成microsoft.com或其他任何人?

Android Developer docs状态

你应该签所有的应用程序同一证书的整个应用程序的预期寿命。

那么如果有一天我将其中一个应用程序的权利出售给其他人,会发生什么?那要么迫使买家重新开始新的Android应用程序,否则我将不得不向他们出售所有东西,而不仅仅是一个应用程序?

显然,以上所有都是有效处理的漏洞。然而,我不清楚与他们打交道的措施可能是什么。我会非常感谢任何能够解释我的理解和推理存在缺陷的人。

回答

1

因此,我有完全的自由伪装成microsoft.com或任何其他人吗?

这是一个自签名证书。在生成证书时,没有人关注您使用的值,更不用说相信他们了。

Android开发人员文档状态:“您应该在应用程序的整个预期使用期限内为您的所有应用程序签署相同的证书。”

正如措辞,我不同意这种评估。每个应用程序需要在每个应用程序的预期生命周期内由相同的证书签名。多个应用程序是否由同一个证书签署是一个商业决策,与技术一样多。

那么如果有一天我将其中一个应用程序的权利出售给其他人,会发生什么?

恩,耶?

这将不会有效地迫使买家重新开始新的Android应用程序,否则我会被迫向他们出售所有东西,而不仅仅是一个应用程序?

这就是为什么,如果您预计这可能是您想要做的事情,那么您将为每个应用程序使用单独的证书。例如,顾问必须为每个应用程序(或每个客户至少一个)执行一个证书。相反,如果您正在构建一套应用程序,您需要特别安全地进行通信,那么您可以考虑对套件中的所有应用程序使用单一证书。商业上的分歧是你需要在整个套件中出售权利。

+0

好的。但那么安全在哪里?在浏览器世界中,人们依赖于能够将SSL证书跟踪到可以信任的已知CA.总的来说,浏览器充当看门狗并提醒用户潜在的风险。 '自签名证书。没人注意,但是谁保护了倒霉手机用户的利益? – DroidOS

+1

@DroidOS:自签名证书有两种平台用途。首先,平台可以确定应用程序A和应用程序B是否与证书一起签名,在这种情况下,他们将有更多的合作机会,而不是由不同证书签署的两个应用程序(因此可能来自不同的开发人员)。其次,平台(如果App A由签署*平台本身*的相同证书签署),在这种情况下,App A可以拥有普通应用无法获得的某些权限(例如重启设备)。 – CommonsWare

+1

@DroidOS:应用程序还可以检查另一个应用程序的证书的公钥部分,主要看它是否与已知值相匹配。否则,这些自签名证书中的安全性与任何使用自签名证书时的安全性差不多。例如,对于Web,自签名证书对于启用SSL加密非常有用,但对建立真实世界的身份或与某些域的关系没有用处,这就是为什么浏览器警告用户,然后遇到此类证书的原因。 – CommonsWare