安卓设备如何获取开发者的公钥?

9
Android系统要求所有已安装的应用程序都必须使用由应用程序开发人员持有的证书进行数字签名。具体来说,公钥如何分发给客户端的Android设备呢?开发人员在发布应用程序时是否将公钥包含在apk中?如果是这样的话,公钥存储在哪里?
或者Android市场,例如Google Play,保存开发人员ID列表以及相应的公钥,并在下载应用程序时将正确的密钥推送到客户端设备上吗?
是否有任何文档传达这些信息?
非常感谢任何输入。
4个回答

11

公钥分布在apk文件中。如果你解压缩一个apk文件,你可以在里面找到一个名为META-INF的特殊文件夹,其中包含有关签名的所有信息。基本上,你需要浏览扩展名为*.RSA和*.DSA的文件,其中包含了该应用程序包的签名和公钥。

你可以阅读这两篇文章(第一篇第二篇)来了解整个过程。


2

http://developer.android.com/google/play/licensing/adding-licensing.html#account-key

这个链接的一些部分将解决你的问题 为许可嵌入您的公钥

对于每个应用程序,Google Play服务会自动生成一个2048位RSA公钥/私钥对,用于许可和应用内购买。密钥对与应用程序唯一相关联。虽然与应用程序相关联,但密钥对与您用于签署应用程序(或从中派生的密钥)的密钥不同。

Google Play开发者控制台向任何登录到开发者控制台的开发人员公开用于许可的公钥,但它将私钥隐藏在安全位置,不向所有用户公开。当应用程序请求为您账户中发布的应用程序进行许可检查时,许可服务器使用您应用程序密钥对的私钥对许可证响应进行签名。当LVL接收到响应时,它使用应用程序提供的公钥验证许可证响应的签名。

要向应用程序添加许可证,您必须获取应用程序的许可证公钥并将其复制到应用程序中。以下是查找应用程序的许可证公钥的方法:

进入Google Play开发者控制台并登录。确保您从发布(或将要发布)应用程序的帐户登录。 在应用程序详细信息页面中,找到“服务和API”链接并单击它。 在“服务和API”页面中,找到“许可和应用内购买”部分。在“此应用程序的许可密钥”字段中给出了您的许可证公钥。 要将公钥添加到应用程序中,只需将该字段中的密钥字符串复制/粘贴为String变量BASE64_PUBLIC_KEY的值。在复制时,请确保已选择整个密钥字符串,不要省略任何字符。

以下是LVL示例应用程序的示例:

public class MainActivity extends Activity {
    private static final String BASE64_PUBLIC_KEY = "MIIBIjANBgkqhkiG ... "; //truncated for this example
...
}

1
你需要在发布前将它们上传到Play商店。然后,它会与你的apk签名进行检查: http://developer.android.com/google/play/licensing/adding-licensing.html#account-key
如果你是在谈论应用程序安装验证的关键:你可以使用任何密钥签署应用程序并通过adb进行安装。 但是,你必须使用相同的密钥重新安装应用程序。在这种情况下,密钥不会像Google Play那样针对全局存储库进行检查,而只是本地检查。
对于测试,情况有些不同,我认为这是由于测试工具和被测试代码之间的交互所致,它们必须在同一进程中运行。因此,如果您使用调试证书安装应用程序的测试包,则无法使用发布证书安装该应用程序。您要么使用调试证书安装该应用程序,要么卸载测试。
这里有一些细节:http://developer.android.com/tools/publishing/app-signing.html

感谢您的输入。我并不是在询问Google Play提供的许可服务。我正在询问应用程序安装期间用于证书验证过程的密钥。 - user3361508

1
这是一个示例,请按照“获取证书”的1-8步骤操作。 这不仅仅是一篇Google API教程,它还涵盖了你在上述部分所需的关键签名。
那里还有一个链接,关于Android开发的调试和发布密钥,提供了更多关于Android开发网站的信息。

LINK: Android签名密钥和Google地图API密钥


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接