gpg简介
GPG用于数据加密和数字签名。GPG基于OpenPGP标准,是PGP(Pretty Good Privacy)的替代品,后者是一个较早的加密软件。GPG提供了强大的加密功能,允许用户保护他们的通信和文件,确保只有授权的人能够阅读或修改它们。
GPG的主要功能包括:
- 数据加密:可以加密文件和通信,确保信息在传输过程中的安全性。
- 数字签名:用户可以对文件或消息进行签名,以证明其来源和完整性。
- 密钥管理:GPG使用公钥和私钥系统,用户可以生成密钥对,并通过密钥服务器分享他们的公钥。
- 安全通信: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
,生成密钥就能瞬间完成
- 安装rng-tools这个工具:
列出密钥
- 列出私钥
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