
Generate GPG keyring
使用下面的命令生成 GPG keyring。输入 Name 和 Email 。输入 o 确认后,passphrase 可以不输入(保留为空即可),passphrase 保留为空代表不需要密码保护(公钥和私钥需要确认两次)。
gpg --gen-key |
查看生成的 GPG key
gpg -K |
rpmsign
导出公钥,生成一个公钥文件,此公钥文件通常根据用途不同放到 repo 源中,或者直接导入系统用于安装 RPM 时进行 GPG 验证。
gpg --armor --export > RPM-GPG-KEY-EXAMPLE |
将所有的 RPM 包进行签名
rpmsign --define "_gpg_name security@example.com" --addsign *.rpm |
migrate GPG keyring
1、export GPG keyring
-a, –armor, 以 ascii 方式导出
# export public key |
2、export GPG trustdb (Optionally)
# export gpg's trustdb (Optionally) |
3、import GPG keyring
gpg --import myprivatekeys.asc |
4、import trustdb
gpg --import-ownertrust mytrustdb.txt |
当我们导入 GPG keyrings 时,GPG 并不信任 keyrings,需要导入 trustdb 后,并更新下 trustdb
gpg --update-trustdb |
5、force trust GPG keyring
如果没有导入 trustdb,GPG 认为 keys 不可信。可以使用下面的命令信任所有的 GPG keyrings。
注意,只信任自己创建的 keyring,不要信任互联网的其他 keyring。
gpg --list-keys --fingerprint |grep pub -A 1|egrep -Ev "pub|--"|tr -d ' ' \ |
搭配 OBS 使用
OBS(Open Build Service) 是一个可以用于为各个发行版打包的编译系统。OBS 系统默认会使用自己生成的签名,但是如果能让 OBS 系统使用我们自己的签名不是很好,接下来就介绍如何让 OBS 使用我们的 GPG Keyring 为 RPM 包进行签名。
平时我们使用 rpmbuild 命令在虚拟机或者 docker 中打包的时候签名的公钥都是存放在 ~/.gnupg
目录下,这也是 gpg -k 等命令的默认搜索路径,但是 OBS 是一个单独的系统,他的配置都放在单独的 /srv
目录下。rpmsign 使用的公钥的存放目录是 /srv/obs/gnupg
。
因此,只需要在导入 GPG Keyring 时候,通过 --homedir
指定目录即可,
gpg --import my-publickey.asc |
FAQ
为什么需要迁移 GPG keyring
进行 RPM 打包的时候,都会给 RPM 包签名。同一个发行商都会给 RPM 包签名,不同的 build system,比如 OBS(open build service),Koji 等都可以实现自动签名。我们可以导入 GPG keyring,而不是让构建系统自己生成一个。
为什么需要导入 trustdb?
如果不导入 trustdb,当导入迁移后的 GPG keyring 时,GPG keyring 状态变为 unknown。
[root@localhost ~]# gpg -K |
[root@localhost ~]# gpg -K |
Reference
1、https://access.redhat.com/solutions/2115511
2、https://docs.pagure.org/koji/signing/
5、https://www.gnupg.org/documentation/manuals/gnupg/GPG-Configuration.html