apk文件中的签名和证书有什么区别?

What is difference between signature and certificate in apk file?

我知道证书包含 public 密钥和一些额外信息(我希望如此),但它是否保存在 apk 文件中?它是文件还是文本还是什么?签名到底是什么? 在 Android 中,我们可以轻松阅读哪一篇来验证应用程序?

据我所知(我对 android 开发还很陌生),您使用证书对 apk 进行签名。如果我错了,有人纠正我。

以下是一些附加信息: https://source.android.com/security/apksigning/v2 https://developer.android.com/studio/publish/app-signing.html

此外,如果您想通过 google Play 商店发布,请务必了解以下内容: The apk must be signed with the same certificates as the previous version

编译 APK 时,最后的步骤之一是签署 APK。实际上它是在添加 3 个小文件。您可以将任何 APK 重命名为 ZIP,解压它,您将找到目录 META-INF - 这是您的签名信息。

MANIFEST.MFCERT.SF 非常相似,包含文件列表及其 sha1/sha256 哈希和(一个用于文件,第二个仅用于第一个文件的条目),并且 CERT.RSA 这是带有您的 public 密钥的 x509 证书。

证书和密钥库

一个public密钥证书,也称为数字证书或身份证书,包含public/private密钥对的public密钥,以及一些其他元数据识别密钥的所有者(例如,姓名和位置)。证书的所有者持有相应的私钥。

当您签署 APK 时,签名工具会将 public 密钥证书附加到 APK。 public-key 证书用作 "fingerprint",将 APK 与您和相应的私钥唯一关联。这有助于 Android 确保您的 APK 未来的任何更新都是真实的并且来自原始作者。用于创建此证书的密钥称为应用签名密钥。

密钥库是包含一个或多个私钥的二进制文件。

每个应用程序必须在其整个生命周期内使用相同的证书,以便用户能够安装新版本作为应用程序的更新。有关在所有应用程序的整个生命周期中使用相同证书的好处的更多信息,请参阅下面的签名注意事项。

签署您的调试版本

当 运行从 IDE 调试或调试您的项目时,Android Studio 会自动使用 Android SDK 工具生成的调试证书对您的 APK 进行签名。第一次 运行 或在 Android Studio 中调试项目时,IDE 会自动在 $HOME/.android/debug.keystore 中创建调试密钥库和证书,并设置密钥库和密钥密码。

由于调试证书是由构建工具创建的并且在设计上是不安全的,因此大多数应用商店(包括 Google Play 商店)不会接受使用调试证书签名的 APK 进行发布。

Android Studio 会自动将您的调试签名信息存储在签名配置中,因此您不必在每次调试时都输入它。签名配置是一个对象,包含对 APK 进行签名所需的所有信息,包括密钥库位置、密钥库密码、密钥名称和密钥密码。您不能直接编辑调试签名配置,但可以配置如何对发布版本进行签名。

有关如何构建和 运行 应用程序进行调试的更多信息,