【问题标题】:How does Android devices get developers' public keys?Android 设备如何获取开发者的公钥?
【发布时间】:2014-04-01 18:54:27
【问题描述】:

Android 系统要求所有已安装的应用程序都使用证书进行数字签名,该证书的私钥由应用程序的开发人员持有。公钥具体如何分发到客户端 Android 设备?开发者发布应用时,公钥是否包含在 apk 中?如果有,密钥存储在哪里?

或者 Android 是否有市场,例如谷歌播放,保存一个开发者ID列表加上相应的公钥,并在下载应用程序时将正确的密钥推送到客户端设备?

是否有任何文档传达此信息?

非常感谢您的任何意见。

【问题讨论】:

    标签: android certificate public-key android-framework


    【解决方案1】:

    您必须在发布前将它们上传到 Play 商店。

    然后根据您的 apk 的签名对其进行检查: http://developer.android.com/google/play/licensing/adding-licensing.html#account-key


    如果您谈论的是在安装时验证应用程序的密钥:您可以使用任何密钥对应用程序进行签名并通过 adb 安装它。 但是,您必须使用相同的密钥重新安装应用程序。在这种情况下,不会像 Google Play 那样针对全局存储库检查密钥,而是在本地检查它们。

    对于测试,情况有点不同,我相信这是由于 Instrumentation runner 和被测代码的交互,它们必须在同一个进程中运行,所以,如果你安装带有调试证书的应用程序的测试包,那么您无法使用发布证书安装应用程序,您也可以使用调试证书安装应用程序,或者您卸载测试。

    这里有一些细节:http://developer.android.com/tools/publishing/app-signing.html

    【讨论】:

    • 感谢您的意见。我不是在问 Google Play 提供的许可服务。我在应用安装期间询问证书验证过程的密钥。
    【解决方案2】:

    这是一个示例,请按照“获取证书”中的步骤 1 - 8。 这不仅仅是一个 Google API 教程,它涵盖了您在我提到的那一部分中需要的密钥签名。
    那里还有一个关于 Android 开发的 Debug 和 Release 密钥的链接,它提供了有关 Android 开发网站的更多信息。

    LINK: Android Signing Keys and Google Map API Key

    【讨论】:

      【解决方案3】:

      公钥分布在 apk 文件中。如果您取消归档 apk 文件,您可以在那里找到一个名为 META-INF 的特殊文件夹,其中包含有关签名的所有信息。基本上,您需要探索扩展名为 *.RSA 和 *.DSA 的文件,其中包含包的签名以及公钥。

      你可以阅读这两篇文章(onetwo)了解流程

      【讨论】:

        【解决方案4】:

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

        链接的某些部分将解决您的问题 嵌入您的公钥以进行许可

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

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

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

        转至 Google Play 开发者控制台并登录。确保登录到您正在许可的应用程序已发布(或将要发布)的帐户。 在应用程序详细信息页面中,找到服务和 API 链接并单击它。 在服务和 API 页面中,找到许可和应用内计费部分。您的许可公钥在 Your License Key For This Application 字段中给出。 要将公钥添加到您的应用程序,只需将字段中的密钥字符串复制/粘贴到您的应用程序中,作为字符串变量 BASE64_PUBLIC_KEY 的值。复制时,请确保您选择了整个密钥字符串,没有遗漏任何字符。

        这是 LVL 示例应用程序中的一个示例:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-02-10
          • 2013-01-16
          • 1970-01-01
          • 2012-03-09
          • 1970-01-01
          • 2020-08-12
          • 1970-01-01
          相关资源
          最近更新 更多