我正在慢慢了解Android应用程序签名的主题,但我理解的每一步只会导致进一步的问题。到目前为止我所理解的(我应该提到我的最终目标是在无头Ubuntu服务器上自动化Phonegap构建,所以我在下面写的所有内容都使用了Phonegap CLI)
密钥库是一系列私有 - 公共密钥对,每个密钥对都使用自己的密码进行保护。密钥库作为一个整体也有自己的密码。嵌入在APK中的公共键 IS 证书。可以检查APK中使用的证书如下
生成公私密钥对很容易。它甚至可以通过发布一个简单的
自动化
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
我使用Phonegap构建了一个发布 apk,通过短信向我发送了一个链接,下载然后安装了APK。我的手机给了我一些警告但是然后安装了我的APK。太酷了!
但这让我感到疑惑....我创造了第二个别名
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
我这次用Microsoft别名重建了APK,给自己发了一个链接,然后下载并安装了它(我在这里略过了一些安装细节)。我的Android手机再一次给了我一些警告,但似乎并不过分关注我自称是微软的说法。
我不明白。根据我在Android世界中所读到的,通常的做法是使用自签名证书。所以我完全可以伪装成microsoft.com或其他任何人吗?
您应该在应用程序的预期生命周期内使用相同的证书对所有应用进行签名。
那么,如果有一天我将我的某个应用程序的权利出售给其他人,会发生什么?这会有效地迫使买家重新启动一个新的Android应用程序,否则我将被迫出售所有东西,而不仅仅是一个应用程序?
显然,上述所有问题都是有效处理的漏洞。但是,对我来说,处理它们的措施可能是什么并不清楚。我非常感谢任何能够解释我的理解和推理存在缺陷的人。
答案 0 :(得分:1)
所以我完全可以伪装成microsoft.com或其他任何人吗?
这是一张自签名证书。没有人会关注您在生成证书时使用的值,更不用说相信它们了。
Android开发者文档声明:"您应该在应用程序的预期生命周期内使用相同的证书对所有应用进行签名。"
如上所述,我不同意这种评估。每个应用程序都需要在每个应用程序的预期生命周期内使用相同的证书进行签名。多个应用程序是否由同一证书签名是一项业务决策,与技术决策一样多。
嗯,呀?那么,如果有一天我将我的某个应用程序的权利出售给其他人,会发生什么?
这会有效地迫使买家重新启动一个新的Android应用程序,否则我将被迫出售所有东西,而不仅仅是一个应用程序?
这就是为什么,如果您预计这可能是您想要做的事情,那么您将为每个应用程序使用单独的证书。顾问肯定应该为每个应用程序(或每个客户至少一个)做一个证书,例如。
相反,如果您正在构建一套应用程序,您特别需要它们之间进行安全通信,您可以考虑为套件中的所有应用程序使用单个证书。业务分歧是您需要在整个套件中出售权利。