GPG 签发并验证rpm和yum repo

Linux RPM包安全验证:GPG密钥导入与签名验证原理详解 在Linux软件包管理中,RPM(Red Hat Package Manager)是Red Hat、CentOS、Fedora等发行版的核心工具。其安全机制基于非对称加密原理,通过GPG数字签名确保软件包的完整性与来源可信性。公钥加密体系允许发布者用私钥签名,用户用公钥验证,从而构建从仓库到客户端的信任链。这一机制的技术价值在于防范软件供应链攻击,确保安装的软件未被篡改。应用场景广泛,包括从官方仓库安装MySQL、MongoDB等数据库,或配置EPEL、RPM Fusion等第三方仓库时。当遇到“NOKEY 阅读详情

https://blog.packagecloud.io/eng/2014/11/24/howto-gpg-sign-verify-rpm-packages-yum-repositories/
本文将展示GPG的签名如何因应用于RPM为文件和YUM仓库的,以及我们如何生成和验证这些签名.
本文还将介绍python库pygpgme,以及我们如何利用它在RPM以及YUM的仓库中验证GPG签名。

问什么需要GPG签名

我们用GPG签名了我们发布的数据,消费者获取到我们的数据,也获取到我们的数据签名,可使用我们的签名验证我们的数据未经人篡改过,是我们提供的原始数据。
RPM包和YUM repo metadata 都可以通过GPG来签名。

Pygpgme

Pygpgme实际上就是打包了GPGME的功能的一个python库,该库可以更直接的使用GPG。
GPGME提供了一些非常便利的接口去获取到GPG key, 加密数据,解密数据等。
YUM是用python开发的,所以,YUM大量使用这个库去验证RPM和YUM repo Metabata中的数字信息。

RPM GPG 签名

RPM文件格式是一种二进制文件格式,其包含:

  • 一个被称为‘lead’的数据结构,但是多数已经被‘header’数据结构所取代
  • 一个包含GPG签名的签名部分,可用于验证这个从创建后并没有被篡改过。
  • 一个头部,包含了一系列索引,用来存储关于RPM包和文件的内部信息
  • CPI0压缩归档后的gzip,包含会被写到文件系统的真实的文件
    一个RPM文件的GPG签名是基于header和CPIO计算生成的,然后存储在签名部分。
    我们可以用rpmsign或者rpm --addsign去签名RPMs。 例如你的有一个rpm为filename.rpm,你的SIGN Key为
Cara Wang <bookview@126.com>

则你的.rpmacros为

%_gpg_name  Cara Wang <bookview@126.com>

则我们可以对该rpm包签名

rpm --addsign filename.rpm

RPM Repo metadata GPG 签名

签署repo metadata的目的和我们签署RPM的目的是一样的。经过验证防止篡改。
createrepo在创建repo时,不会自动为repo metadata生成GPG签名,我们可以使用命令为其生成一个分开的GPG签名。
假设我们有一个repo metadata为repomd.xml,则我们可以运行以下指令

gpg --detach-sign --armor repodata/repomd.xml

这个命令会生成一个为‘repodata/repomd.xml.asc’的文件,该文件中包含了一个GPG签名的ASCII版本。
通过repo config的某些选项配置,YUM客户端会主动的请求这个文件并尝试去验证这个签名。

使能RPM和metadata的签名认证

为了能很好的验证GPG keys, 我们必须在客户端做以下几件事

  • 必须安装pygpgme包,这样yum才能验证GPG签名。如果不装这个包,yum会跳过GPG签名的验证。安装这个包,我们需要安装EPEL repo.
    在RHEL6/CentOS6及以后系统,默认pygpgme是和yum一起安装的。
  • YUM repos必须以.repo的文件存在,并且在/etc/yum.repos.d/下,如
    /etc/yum.repos.d/my_stuff.repo
    
  • 在repo文件中,有选择的使能以下选项
    gpgcheck=1 去使能每个RPM文件的GPG验证
    repo_gpgcheck=1 去使能YUM repo metadata的GPG验证
    
    而具体的GPG keys,我们可以直接指定文件或者URL。 如
    gpgkey=https://packagecloud.io/gpg.key
    
    或者
      gpgkey=https://packagecloud.io/gpg.key
           https://some-other-website.com/another_gpg.key
    
    当指定为URL时,YUM客户端会自动下载导入。

总结

生成和验证GPG签名对建立包本身和存储包的repo的认证是很重要的。
确认你要安装的包是供应商提供包,你获取包的仓库是供应商提供的仓库,是保证你安装的包是安全的唯一方法。
给RPM和YUM repo签发GPG和验证GPG不是特别简单,但也并不复杂。尝试签发和验证你的GPG吧。

“Couldn‘t open file /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022“ "Couldn't open file /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022" 阅读详情

相关推荐

深入解析RPM包GPG签名验证:从原理到实战解决NOKEY错误

在Linux软件包管理中,GPG签名验证是保障软件供应链安全的核心机制。其原理基于非对称加密技术,软件发布者使用私钥对RPM包进行签名,系统则通过对应的公钥验证包的完整性和来源真实性。这项技术不仅防止了恶意软件植入,还确保了软件包在传输过程中未受损,并维护了仓库元数据的一致性,从而避免依赖关系混乱。在RPM系发行版(如CentOS、Fedora)的日常运维中,正确处理GPG密钥是安全安装软件的前提。当遇到“NOKEY”错误时,通常意味着系统缺少验证软件包所需的公钥。通过rpm --import命令导入正确的

weixin_33985679的博客 318

Linux之Yum_rpm_repo详解

Linux之Yum_rpm_repo详解

lusklusklusk的博客 4305

Linux yum仓库GPG校验安全配置详解:从原理到实践

在Linux系统管理和软件供应链安全领域,软件包完整性校验是保障系统安全的基础环节。GPG(GNU Privacy Guard)数字签名机制通过“私钥签名、公钥验证”的原理,确保软件包在传输和安装过程中未被篡改,有效防御中间人攻击和恶意代码植入。这项技术的核心价值在于构建可信的软件分发体系,是运维安全合规的重要支撑。在实际工程实践中,yum/dnf包管理器的`gpgcheck`参数正是这一机制的关键开关,它直接控制着软件包安装前的签名验证行为。正确配置GPG校验对于生产环境稳定性至关重要,特别是在配置第三方

weixin_34116110的博客 340

Linux软件管理YUM

YUM就是通过分析RPM的标头数据后,根据各软件的相关性制作出属性依赖时的解决方案,然后可以自动处理软件的依赖属性问题,以解决软件安装或删除与升级的问题发布的软件先放置到YUM服务器内,然后分析这些软件的依赖属性问题,将软件内的记录信息记录下来(header),然后再将这些信息分析后记录成软件相关性的列表,这些列表数据与软件所在的主机或网络上的位置可称为软件源或软件仓库(repository)

Thewei666的博客 2417

成功解决安装MySQL5.7提示公钥GPG密钥配置为file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

成功解决安装MySQL5.7提示公钥GPG密钥配置为file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

低调,谦虚,自律,反思,成长,保持热爱,奔赴梦想 1738

CANopen PDO 配置實戰:3步完成0x1800-0x1A00物件字典映射與事件觸發

本文详细解析CANopen PDO配置实战,通过3个关键步骤完成0x1800-0x1A00对象字典映射与事件触发设置。重点介绍COB-ID位域解析、映射参数配置及事件触发优化,帮助工程师实现工业自动化设备间毫秒级实时数据交换,提升系统通信效率。

weixin_33709609的博客 379

【linux】yum命令|替换yum源|替换apt源|EPEL/ELRepo

命令: #查看软件包 yum list all ##列出yum源仓库里面的所有可用的安装包 yum list installed ##列出所有已经安装的安装包 yum list available ##列出没有安装的安装包 #安装软件 yum install softwarename ##安装指定的软件 yum reinstall softarename .

我的笔记本 1万+

python画弗里德曼(Friedman) 检验和秩和检验(Nemenyi)检验图

python画弗里德曼(Friedman) 检验和秩和检验(Nemenyi)检验图 画好后效果图 实现代码如下 import matplotlib.pyplot as plt #算法平均排名 _alg_=[1.405,2.643,2.786,2.167] y=[1,2,3,4]#alg1,alg2,alg3,alg4 通过Nemenyi测试计算得到的临界值CD CD=1.024 h_CD=CD/2 plt.figure(figsize=(10,6)) plt.scatter(_alg_,y,s=10

大模型天花板 4464

Linux入门攻坚——10、Linux程序包管理-2

安装的httpd在/usr/local/apache2下,相关的命令在此路径的bin下,要想直接运行,如直接执行apachectl,是找不到此文件的,查看环境变量$PATH,其值为—— /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin,要想直接运行,需要将相关路径导出到$PATH变量中。yum服务器,一般有:FTP://或HTTP://,或者本地(光盘)文件,使用file://

kaoa000的专栏——非淡泊无以明志,非宁静无以致远 1061

Palantir解密:“本体”的建模逻辑及其扩展方向

上一篇重点从对现实世界建模的角度探讨了“本体”在数字化架构中的核心意义。这里借Palantir的“本体”概念、解析Palantir只是起点,目标旨在以他山之石攻玉——探索数字世界的底层架构逻辑,最终为构建自主体系提供思考。Palantir以“本体论”为核心的建模方案是否代表终极答案,不宜过早下结论,但其思路值得深入剖析。

SZSDQJC的博客 2632

你知道几种数字地与模拟地连接方式及优缺点?

频率选择性:磁珠的阻抗特性随频率变化,只对某个频点的噪声有显著抑制作用,对于频率不确定或无法预知的情况,可能不是最佳选择。在实际应用中,选择合适的连接方式需要根据具体的电路频率、信号类型、设计要求等因素综合考虑,以达到最佳的电磁兼容效果.高频信号干扰:在高频电路中,单点接地可能导致信号回流路径过长,增加地线电感,从而引入高频噪声。限制噪声电流:0欧姆电阻相当于一个非常窄的电流通路,能够有效地限制环路电流,使噪声得到抑制。抑制高频信号:电感对高频信号有较大的阻碍作用,可以有效抑制高频噪声。

linkking27的博客 799

给RPM软件包签名

我们自己制作的软件包,为了防止被篡改,一般要使用私钥进行签名,然后将公钥广而告之,下载使用软件包的话,可以通过公钥进行验证签名,从而确保文件的原始性。 [size=x-large]生成密钥对[/size] 首先我们要使用gpp来生成公私钥对。目前最先进的加密算法是RSA,所以我们使用RSA来生成密钥对: [quote]$ gpg --gen-key gpg (GnuPG) 1.4....

Linux学堂 722

Xilinx平台SRIO介绍(二)SRIO IP核基础知识

使用SRIO IP核必须掌握的基础知识! 理解了这篇,剩下的只是代码罢了。

数字IC/FPGA杂货铺,找一找,或许有你想要的~ 4万+

Linux使用yum下载gcc遇到错误:GPG 检查失败的一个解决办法

linux下载gcc报错处理方式

S_Emiya的博客 3065

第29章:PCL PrincipalCurvatures 曲率估计

PrincipalCurvatures(主曲率估计)是一种用于计算点云表面曲率的算法。曲率描述了曲面局部的弯曲程度,是表面几何特征的重要指标。在点云处理中,估计表面的曲率对于形状分析、物体识别、表面重建等任务非常重要。主曲率是曲面上某一点的最大和最小曲率方向。通过计算点云的主曲率,我们可以获得点云中每个点的局部形状特征。通常情况下,主曲率包括两个主要参数:最大主曲率(最大曲率方向上的曲率)和最小主曲率(最小曲率方向上的曲率)。优点缺点提供了对点云表面局部形状的深入分析。

yumeiguo的博客 211

Calibre LVS 问题解析

LVS常见问题与解决办法

m0_61544122的博客 2万+

Centos 6.0 yum–中国科技大学源 和关于 error: /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6: key 1 import failed.

1.先把/etc/yum.repos.d备份 #cp -a /etc/yum.repos.d/ /etc/yum.repos.d.back   2.修改/etc/yum.repos.d/CentOS-Base.repo文件 #vim /etc/yum.repos.d/CentOS-Base.repo # The mirror system uses the c

2x 青年,欢乐多。 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【CentOS7.6】yum报错 GPG密钥不匹配:GPG Keys are configured as: https://mirrors.aliyun.com/centos/...

GPG(GNU Privacy Guard)密钥用于验证软件包的完整性和来源。具体来说,它可以确保软件包在传输过程中没有被篡改,并且确实是由合法的发布者创建的。GPG 密钥分为公钥和私钥两部分:公钥:用于验证签名,通常发布给用户和系统。私钥:用于对软件包进行签名,只有发布者拥有。在使用 yum 安装软件包时,系统会使用 GPG 公钥来验证软件包的签名,以确保软件包的安全性。

励志成为会前后端、运维、云服务、嵌入式开发、AI和自动化技术的创业小老板! 6438

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

MySQL问题: mysql-community-libs-compat-5.7.41-1.el7.x86_64.rpm 的公钥尚未安装

MySQL问题: mysql-community-libs-compat-5.7.41-1.el7.x86_64.rpm 的公钥尚未安装

巧克力配酸奶的博客 5312

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【华为云】如何在华为云欧拉系统 ECS 实例新建私有 REPO 源并制作安全 RPM 包

工作中遇到,简单整理博文内容为 华为云开发者认证 实验笔记理解不足小伙伴帮忙指正对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧 ——赫尔曼·黑塞《德米安》在某些情况下,我们可能需要在华为云欧拉系统ECS实例上新建私有REPO源:通过创建私有REPO源,您可以在本地维护和管理自己的软件包,而无需依赖公共的软件源。

山河已无恙 2079

CentOS 7下用yum装PostgreSQL 12踩坑记:那个烦人的GPG签名错误到底怎么破?

本文详细介绍了在CentOS 7系统下使用yum安装PostgreSQL 12时遇到的GPG签名验证错误及其解决方案。通过更新GPG密钥、清理yum缓存和验证仓库元数据等方法,帮助用户彻底解决这一常见问题,确保安全且顺利地完成PostgreSQL 12的安装与配置。

weixin_30632089的博客 656

告别“依赖地狱“——从 rpm 到 yum,再到自建仓库的包管理进阶之路

yum install 谁都会敲,但背后的 rpm 包长什么样?依赖是怎么自动解决的?没有外网怎么装软件?本篇从 RPM包的文件名密码、GPG 签名机制讲起,一路打通 yum 全系列命令、第三方仓库配置、源码编译安装,最后手把手教你搭一个局域网yum 仓库——让别人从你这儿 yum install。

2301_82263835的博客 523

Nexus 配置yum私库

文章目录前序base私库地址的配置规则epel-releaseonlinelocal让nexus私库缓存你的rpm包 前序 原来的文章已经记录过如何创建私库等操作,这篇文章直接讲重点。有需要的可以参考: Nexus Maven Repositories base base库我使用的是阿里源 可以看到remote-storage是: http://mirrors.aliyun.com/centos 。 这个可以去先在下载镜像源,在xxx.repo里的baseurl字段中可以看到。 私库地址的配置规则 配

oneslide 2174

centos yum的配置文件 repo文件详解

版权声明:本文为 testcs_dn(微wx笑) 原创文章,非商用自由转载-保持署名-注明出处,谢谢。原文参考 什么是repo文件? repo文件是Fedora中yum源(软件仓库)的配置文件,通常一个repo文件定义了一个或者多个软件仓库的细节内容,例如我们将从哪里下载需要安装或者升级的软件包,repo文件中的设置内容将被yum读取和应用! YUM的工作原理并不复杂,每一个 RPM

DreamerLDX的博客 1672

yum rpm原理

简单罗列基础命令,不粘贴、不复制,只分享我的想法! GNU/LINUX是一个开源的操作系统,遵循POSIX规范,种类异常丰富的开源软件均能在以Linux为kernel的OS中运行,前提是你需要把你想要安装的开源软件在你的硬件平台上进行编译和安装,非常的麻烦,为了解决流行软件安装的复杂问题,程序包管理器应运而生。 程序包管理器其实是Linux Release推出一种程序包的管理程序,这个程序包管...

pythonluo的专栏 1045
上一篇: Linux xargs用法的简单例子
下一篇: linux 查看磁盘分区的常用指令
solinger
博客等级 码龄16年 125粉丝 99原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值