`
猫太的鱼
  • 浏览: 233236 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

给RPM软件包签名

 
阅读更多
我们自己制作的软件包,为了防止被篡改,一般要使用私钥进行签名,然后将公钥广而告之,下载使用软件包的话,可以通过公钥进行验证签名,从而确保文件的原始性。
生成密钥对

首先我们要使用gpp来生成公私钥对。目前最先进的加密算法是RSA,所以我们使用RSA来生成密钥对:

引用
$ gpg --gen-key
gpg (GnuPG) 1.4.5; Copyright (C) 2006 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.

gpg: 已创建目录‘/home/admin/.gnupg’
gpg: 新的配置文件‘/home/admin/.gnupg/gpg.conf’已建立
gpg: 警告:在‘/home/admin/.gnupg/gpg.conf’里的选项于此次运行期间未被使用
gpg: 钥匙环‘/home/admin/.gnupg/secring.gpg’已建立
gpg: 钥匙环‘/home/admin/.gnupg/pubring.gpg’已建立
请选择您要使用的密钥种类:
   (1) DSA 和 ElGamal (默认)
   (2) DSA (仅用于签名)
   (5) RSA (仅用于签名)
您的选择? 5
...


生成密钥对以后,查看公钥:

引用
$ gpg --list-keys
/home/admin/.gnupg/pubring.gpg
------------------------------
pub   2048R/C0EB63C7 2011-04-11
uid                  Repository Signer (OSSXP) <amoblin@ossxp.com>


rpm软件包签名

修改rpm宏,使用我们的密钥对:

引用
$ echo %_signature gpg >> ~/.rpmmacros
$ echo "%_gpg_name Repository Signer (OSSXP)" >> ~/.rpmmacros


对已有rpm软件包进行签名:

引用
$ rpm --addsign package_name.rpm
Enter pass phrase:
Pass phrase is good.
...


如果签名时出现下面的错误:

引用
$ rpm --addsign package_name.rpm
Enter pass phrase:
Pass phrase check failed


那么应该仔细检查密钥名称和写入rpm宏里面的是否一致,注意括号前有一个空格。

在rpmbuild打包时签名:

引用
$ rpmbuild --sign --ta hello-0.1-1.tar.gz


这样生成的RPM包就包含签名啦~

验证软件包

验证签名需要使用公钥,这里我们先将gpg产生的公钥导出到一个文件,然后将这个公钥文件导入到RPM数据库里,然后使用rpm命令进行检验。

导出公钥到一个文本文档:

引用
$ gpg --export -a "Repository Signer (OSSXP)" > RPM-GPG-KEY-OSSXP


查看rpm数据库中已有的公钥:

引用
$ rpm -q gpg-pubkey-*
gpg-pubkey-e8562897-459f07a4
gpg-pubkey-cf4c4ff9-4d5efb53
gpg-pubkey-217521f6-45e8a532


将公钥导入到RPM数据库。

引用
$ sudo rpm --import RPM-GPG-KEY-OSSXP


再次查看:
引用

$ rpm -q gpg-pubkey-*
gpg-pubkey-e8562897-459f07a4
gpg-pubkey-cf4c4ff9-4d5efb53
gpg-pubkey-217521f6-45e8a532
gpg-pubkey-c0eb63c7-4da2c3e0


最后一个就是我们导入进来的公钥。

在rpm命令中使用 -K 参数进行签名验证:

引用
$ rpm -K noarch/ossxp-release-0.1-2.noarch.rpm
noarch/ossxp-release-0.1-2.noarch.rpm: rsa sha1 (md5) pgp md5 OK


如果结果最后不是OK而是类似下面的:
引用

$ rpm -K noarch/ossxp-release-0.1-2.noarch.rpm
ossxp-release-0.1-2.noarch.rpm: RSA sha1 (MD5) (PGP) (MD5) (PGP) md5 NOT OK (MISSING KEYS: PGP#c0eb63c7 PGP#c0eb63c7)


那么可能是导入了不匹配的公钥或导入未遂,请重新导入正确的公钥。

有人说,这么麻烦,我不导入公钥,不验证,直接安装不行吗?当然可以,只不过在安装时会出现一个小小的警告罢了:

引用
$ rpm -Uvh ossxp-release-0.1-2.noarch.rpm
warning: ossxp-release-0.1-2.noarch.rpm: Header V3 RSA/SHA1 signature: NOKEY, key ID c0eb63c7
Preparing...                ########################################### [100%]
package ossxp-release-0.1-2.noarch is already installed



在YUM中验证签名

将公钥复制到系统RPM公钥目录:

引用
$ sudo cp RPM-GPG-KEY-OSSXP /etc/pki/rpm-gpg/


在源配置文件中通过如下两行来指定gpg key检验:

引用
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-OSSXP


这样在通过YUM安装软件包时,当下载完毕以后会首先使用公钥进行签名验证。
分享到:
评论

相关推荐

    qat-driver-rpm:cwyang的Intel QAT驱动程序RPM软件包

    cwyang的QAT驱动程序RPM软件包 感谢造访! 英特尔的QAT RPM驱动程序在目标计算机上构建内核模块时,该RPM软件包提供了预构建的内核模块。 这是我的第一个RPM包装经验,花了几个晚上.. :hot_beverage:将QAT驱动程序...

    qubes-packages:Qu Qubes OS的RPM软件包的存储库

    RPM资料库Qubes OS的RPM软件包的存储库。注意:此存储库当前包含我的软件包,但是本自述文件中的说明将允许您设置自己的存储库。用法初始化存储库删除我所有的软件包并初始化您自己的存储库。 make clean init添加...

    pulseaudio-gdm-hooks-10.0-6.el7_9.x86_64.rpm

    官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装

    docker-engine-18.09.0-101.p01.ky10.x86_64.rpm

    docker离线安装包适应于麒麟V10SP1

    pacur:自动化的deb,rpm和pkgbuild构建系统

    Pacur还将创建一个deb , rpm和pacman签名的存储库,该存储库可在ArchLinux,CentOS,Fedora,Debian和Ubuntu上使用以分发软件包。 媒体上提供了有关创建项目的。 初始化 建议在本地构建Docker映像,而不是从Docker...

    rpmproc-开源

    rpmproc是一个perl程序,旨在使构建RPM软件包更加容易。 它提供了一种简单明了的方式来构建多个拱门,签名软件包,将文件上传到远程或本地存储库。

    displaylink-rpm:DisplayLink USB 显示适配器的 RPM 源

    要在 Fedora 上使用启用了安全启动的 displaylink-rpm 和 evdi 内核模块,您需要使用注册的机器所有者密钥 (MOK) 对模块进行签名。 首先创建一个自签名的 MOK: $ openssl req -new -x509 -newkey rsa:2048 -...

    ohpc:OpenHPC集成,打包和测试仓库

    首先,您可以通过安装ohpc-release RPM在本地启用OpenHPC存储库,该ohpc-release包含用于软件包签名的gpg密钥,并定义[base]和[update]软件包存储库的URL位置。 还提供了针对每个受支持的预配置系统和资源管理器量...

    LazPackager:Lazarus IDE插件

    LazPackager是一个Lazarus插件(您可以在IDE中安装的软件包),它将使您能够从任何现有的Lazarus项目中创建一个可安装(可选签名)的二进制Debian软件包(以后还会包括rpm,inno和其他软件包)。 (在目前的早期...

    Red Hat Linux 定制指南.CHM

    32. 使用 RPM 来管理软件包 32.1. RPM 的设计目标 32.2. 使用 RPM 32.3. 检查软件包的签名 32.4. 用 RPM 在朋友面前大显身手 32.5. 其它资料 33. 软件包管理工具 33.1. 安装软件包 33.2. 删除软件包 34. Red Hat ...

    ssm:安全的STOMP Messenger

    邮件已签名,并且在传输过程中可能会被加密。 持久队列应用于保证交付。 SSM用Python编写。 软件包可用于RHEL 6和7,以及Ubuntu Trusty。 有关SSM的更多信息,请参见 。 致谢 SSM由的一部分提供,并由项目(“地...

    centos7.5分布式平台搭建.docx

    3.2.5. 软件包安装 19 3.2.6. 磁盘分区 19 3.2.7. root用户密码配置 20 3.2.8. 完成安装 20 3.3. IP地址、主机名设置 20 3.4. 磁盘挂载并开机自动挂载 22 3.4.1. 磁盘挂载(如果超过2T的挂载则看超过2T的挂载章节) ...

Global site tag (gtag.js) - Google Analytics