android 个应用证书的用途

Purpose of android app certificates

我想澄清一个与 Android 应用程序证书(在安装过程中使用)相关的困惑。

在网络中,证书用于将 public 密钥映射到域/身份(组织)。详细信息的哈希由CA签名,然后由浏览器验证。

Android 应用附带 public 密钥。根据我的理解,开发人员可以使用他自己的私钥,对应用程序的哈希进行签名,然后使用他的 public 密钥发布应用程序。此信息供安装程序使用。

我的问题是:

  1. 即使使用了某些 CA,应用程序仍会附带 CA 的 public 密钥 - 谁拥有签名 public 密钥重要吗?它可以是任何人,因为安装程序只会使用它。

  2. 完整性检查是 android 应用程序证书的唯一用途吗?应用程序没有像网站一样的 public 密钥,因此未使用证书将某些 public 密钥与应用程序相关联。证书还有其他用途吗?

does it matter who owns the signing public key ?

没有。通常,它们是自签名的。

Is integrity checking the only thing android app certificate is used for ?

它还用于回答两个与权限相关的问题:

  1. 应用程序 A 是否使用与应用程序 B 相同的签名密钥进行签名?如果是,那么这些应用程序可能能够比任意两个应用程序更紧密地进行互操作。

  2. 应用程序 A 是否使用与固件签名相同的签名密钥签名?如果是,则 App A 可以拥有为设备制造商和自定义 ROM 开发人员保留的某些权限。

此外,开发人员可以验证其他应用程序的签名,这有助于确保您正在与正确的应用程序对话。

does it matter who owns the signing public key ? it could be anyone, as installer will just use it.

  • 是的,会的。任何人都可以编写应用程序、自行签署证书并使用它发布应用程序。私钥仍由所有者控制,并且 he/she 可以控制应用程序的所有功能以及应用程序的任何未来更新,如下所述。

Is integrity checking the only thing android app certificate is used for ?

不,它的作用不止于此:

  • 安装无线应用程序更新时,设备将确认更新后的应用程序证书与现有证书匹配。如果开发人员要使用新密钥对应用程序进行签名,he/she 应该更改包名称;如果没有这个,Google Play 不会让开发者更新应用程序。如果开发者确实想要更改签名密钥,he/she 将被迫更改应用程序的包名称,因此这将在 Play 商店中显示为一个新的应用程序。

  • 使用相同 public 密钥的两个或多个应用程序可以相互共享数据。权限可以基于签名,例如允许这样做。

  • 也可以在同一个进程组运行使用同一个密钥签名的2个或多个应用程序,甚至共享代码和状态。

Android 开发者页面中提供了更多详细信息 - https://developer.android.com/tools/publishing/app-signing.html#considerations