searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

使用GPG对rpm软件包签名

2024-06-17 04:09:02
8
0

gpg简介

GPG用于数据加密和数字签名。GPG基于OpenPGP标准,是PGP(Pretty Good Privacy)的替代品,后者是一个较早的加密软件。GPG提供了强大的加密功能,允许用户保护他们的通信和文件,确保只有授权的人能够阅读或修改它们。

GPG的主要功能包括:

  1. 数据加密:可以加密文件和通信,确保信息在传输过程中的安全性。
  2. 数字签名:用户可以对文件或消息进行签名,以证明其来源和完整性。
  3. 密钥管理:GPG使用公钥和私钥系统,用户可以生成密钥对,并通过密钥服务器分享他们的公钥。
  4. 安全通信:GPG可以与邮件客户端集成,实现端到端加密的电子邮件通信。

GPG广泛应用于个人隐私保护、商业通信、软件开发中的代码签名等领域。

gpg的使用

生成密钥

gpg --gen-key

回车过后,会跳出一些文字:

gpg (GnuPG) 2.0.22; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)

用户可以自己选择加密算法。默认加密和签名都使用RSA算法;
然后,系统询问密钥长度,默认是2048位;

RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)

回车后,进行密钥有效期的设定:

Please specify how long the key should be valid.
         0 = key does not expire #密钥永不过期
      <n>  = key expires in n days #密钥在 n 天后过期
      <n>w = key expires in n weeks #密钥在 n 周后过期
      <n>m = key expires in n months #密钥在 n 月后过期
      <n>y = key expires in n years #密钥在 n 年后过期

回车进行确认后,输入个人信息,并设定私钥密码:

Is this correct? (y/N) y

GnuPG needs to construct a user ID to identify your key.

Real name: ctyunos
Email address: ctyunos@chinatelecom.cn
Comment: ctyunos
You selected this USER-ID:
    "ctyunos (ctyunos) <ctyunos@chinatelecom.cn>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O

用户ID:ctyunos (ctyunos) <ctyunos@chinatelecom.cn>
然后,系统开始生成密钥,可以做一些随机的键盘鼠标动作来生成随机字符:

  • 如果系统卡在生成密钥阶段,可以进行一下操作:
    • 安装rng-tools这个工具:yum install rng-tools
    • 在另一个窗口执行命令:rngd -r /dev/urandom,生成密钥就能瞬间完成

列出密钥

  • 列出私钥
    gpg -K 或 --list-secret-keys
  • 列出公钥
    gpg -k 或 --list-keys

导出密钥

  • 导出公钥

    • gpg -a -o public-file.key --export keyid:导出公钥keyid到文件public-file.key中;
      • -a为--armor的简写,表示密钥以ASCII的形式输出,默认以二进制的形式输出;
      • -o为--output的简写,指定写入的文件;
  • 导出私钥

    • gpg -a -o private-file.key --export-secret-keys keyid:导出私钥需要输入私钥密码;

导入密钥

导入公钥

gpg --import public-file.key

导入私钥

gpg --import private-file.key
在批量签名时,为了通过脚本的方式执行,避免弹窗输入密码,可以用以下方法:
(1)直接输入密码
gpg --import --pinentry-mode loopback --batch --passphrase 123456 private-file.key
(2)将密码输入到文件里
gpg --import --pinentry-mode loopback --batch --passphrase-file password-file priate-file.key

rpm包签名

签名步骤

修改配置文件,定义rpm宏,使用特定的密钥对

%_signature gpg
%_gpg_path /root/.gnupg
%_gpg_name ctyunlinux
%_gpgbin /usr/bin/gpg2
echo "ctyunlinux1.0" > passphrase.txt
chmod 600 passphrase.txt

%__gpg_sign_cmd %{__gpg} \
		gpg --no-verbose --no-armor --batch --pinentry-mode loopback \
		--passphrase-file /root/gpgkey/passphrase.txt \
		%{?_gpg_digest_algo:--digest-algo %{_gpg_digest_algo}} \
		--no-secmem-warning \
		-u "%{_gpg_name}" -sbo %{__signature_filename} %{__plaintext_filename}

其中%_gpg_name需要定义成特定密钥名,--passphrase-file后面是第一行为密码的文件路径
对已有rpm软件包进行签名:
rpmsign --addsign /PATH/TO/PACKAGE

验证签名

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

gpg --export -a "ctyunos (ctyunos)" > RPM-GPG-KEY-CTYUNOS

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

rpm -q gpg-pubkey*

将公钥导入到RPM数据库

rpm --import RPM-GPG-KEY-CTYUNOS

验证签名:

rpm -Kv /PATH/TO/PACKAGE
0条评论
0 / 1000
yangtzuho
2文章数
0粉丝数
yangtzuho
2 文章 | 0 粉丝