签名流程
使用公钥/私钥部分的加密签名是 F-Droid 如何提供安全应用分发的核心。使用 F-Droid 工具制作你自己的版本需要签名密钥。仔细考虑关键文件的位置、安全性和备份状态。密钥需要在 F-Droid 存储库或 Android 应用程序的整个生命周期内保持安全。签名密钥是 Android 应用程序和 F-Droid 存储库身份的核心,因此必须妥善保管这些密钥并妥善备份!另外,请注意,Google 的保护这些私钥 的说明仅提供了保护密钥所需的最少步骤.
运行存储库涉及两种类型的签名:
- 存储库索引自身的签名
- 标准的 Android APK 签名流程
存储库索引签名
设置存储库时,第一步应该是为存储库索引生成签名密钥。这还将创建一个密钥库,它是保存签名密钥的文件。
fdroid init
将自动为 F-Droid 存储库创建一个新的签名密钥。可以像创建 Android 签名密钥 一样手动创建密钥,使用如下命令:
keytool -genkey -v -keystore my.keystore -alias repokey \
-keyalg RSA -keysize 2048 -validity 10000
在上面,将 my.keystore 替换为要创建的 keystore 文件的名称,并将 “repokey” 替换为识别存储库索引密钥的名称。 你会被要求提供 keystore 的密码和钥匙的密码。它们不应该是相同的。在这两者之间,你会被要求提供一些识别细节,这些细节将被写入证书。
输入的两个密码分别作为 keystorepass
和 keypass
进入 conconfig.yml。密钥库文件的路径在 密钥库
中设置,你为密钥选择的别名也进入该文件,称为 repo_keyalias
。
APK 签名
F-Droid 工具可以为其维护的每个应用自动生成和管理 APK 签名密钥。 配置存储库索引签名后,包签名工作所要做的就是将 config.yml 中的 keydname 字段设置为包含你之前输入的相同标识详细信息。 将使用这些详细信息为生成的每个应用生成一个新密钥。如果特定应用需要特定密钥,则可以使用 keyaliases 配置设置覆盖此系统。
要设置 fdroid publish
,请在将 APK 复制到并运行 fdroid update
的同一台机器上执行这些步骤。首先,在 config.yml 中设置 keydname,应该是这样的:
keydname = "CN=example.com, O=Example Ltd, C=UK"
在 metadata/ 和 repo/ 目录旁边创建一个名为 unsigned/ 的目录,然后运行这些命令以基于_Application ID_ 和 Version Code:
$ cd /path/to/repobasedir
$ touch metadata/com.example.app.yml
$ mkdir unsigned
$ cp /path/to/app-release-unsigned.apk unsigned/com.example.app_1234.apk
$ fdroid publish --verbose
$ fdroid update --verbose
$ fdroid server update --verbose
包签名
使用 F-Droid 工具构建和/或分发的所有包也可以由 PGP 使用 GnuPG 签名,从 APK 到媒体文件的任何内容都将被签名。此过程使用 fdroid gpgsign
运行。将 gpghome
和 gpgkey
添加到你的 config.yml 中进行配置,examples/config.yml 中有更多信息.
硬件安全模块
硬件安全模块 (HSM) 是专门设计的硬件,用于安全地存储和使用加密密钥。 它们提供只写存储,因此私钥只能写入 HSM,而不能读出它。 fdroidserver 支持使用 HSM 进行存储库签名密钥。
有关如何配置 F-Droid 存储库以使用 HSM 的信息,请参阅 examples/config.yml 的”智能卡”部分,特别是 密钥库
和 智能卡选项
。 最有可能的是, OpenSC 需要设置为 Java 的 PKCS11 提供程序。 hsmwiz是一种使用智能卡 HSM(如 Nitrokey HSM)的更简单方法。OpenSC 和_hsmwiz_ 都可以在 Debian 中使用。
更深入的信息,请参阅:
- fdroidserver 示例配置文件: examples/config.yml
- 使用硬件安全模块发布 F-Droid 存储库
- 拇指驱动器中的安全性:硬件安全模块的承诺和痛苦,挑一个!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论