目录
1 引言
本节对gpg签名工具进行介绍,因为在后面的deb包签名会使用。
要了解什么是GPG,就要先了解PGP。
1991年,程序员Phil Zimmermann为了避开政府监视,开发了加密软件PGP。这个软件非常好用,迅速流传开来,成了许多程序员的必备工具。但是,它是商业软件,不能自由使用。所以,自由软件基金会决定,开发一个PGP的替代品,取名为GnuPG。这就是GPG的由来。
2 签名工具GPG
# Debian / Ubuntu 环境下安装
sudo apt-get install gnupg
2.1 GPG密钥生成
使用--full-generate-key参数生成自己的密钥
gpg --full-generate-key
1)选择默认,加密和签名使用RSA算法
gpg (GnuPG) 1.4.12; Copyright (C) 2012 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.
请选择您要使用的密钥种类:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (仅用于签名)
(4) RSA (仅用于签名)
您的选择?
2)密钥的长度选择4096
RSA 密钥长度应在 1024 位与 4096 位之间。
您想要用多大的密钥尺寸?(2048)
3)设置密钥永不过期
请设定这把密钥的有效期限。
0 = 密钥永不过期
<n> = 密钥在 n 天后过期
<n>w = 密钥在 n 周后过期
<n>m = 密钥在 n 月后过期
<n>y = 密钥在 n 年后过期
密钥的有效期限是?(0)
4)回答完上面三个问题以后,确认即可
以上正确吗?(y/n)
5)提供个人信息
您需要一个用户标识来辨识您的密钥;本软件会用真实姓名、注释和电子邮件地址组合成用户标识,如下所示:
"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"
真实姓名:
电子邮件地址:
注释:
6)系统最终确认,输入O表示"确定"。
更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)?
7)接着,系统会让你设定一个私钥的密码
您需要一个密码来保护您的私钥:
8)系统就开始生成密钥了
我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。
9)生成完成之后提示:
gpg: key 4D23CC4B7070163B marked as ultimately trusted (密钥 4D23CC4B7070163B 被标记为绝对信任)
gpg: revocation certificate stored as '/home/test/.gnupg/openpgp-revocs.d/6F8ECFE34A4B534C3F423EB94D23CC4B7070163B.rev'
public and secret key created and signed. (公钥和私钥已经生成并经签名)
pub rsa3072 2021-05-21 [SC]
6F8ECFE34A4B534C3F423EB94D23CC4B7070163B
uid tests <12345678@qq.com>
sub rsa3072 2021-05-21 [E]
注意:如果要查看完成的公钥私钥,执行
gpg --list-key --keyid-format LONG
输出:
/home/test/.gnupg/pubring.kbx
pub rsa3072/4D23CC4B7070163B 2021-05-21 [SC]
6F8ECFE34A4B534C3F423EB94D23CC4B7070163B
uid [ultimate] tests <12345678@qq.com>
sub rsa3072/2629402583D37D81 2021-05-21 [E]
第一行显示公钥文件名(pubring.gpg),第二行显示公钥特征(4096位,Hash字符串和生成时间),第三行显示"用户ID",第四行显示私钥特征。
2.2 GPG密钥管理
2.2.1 输出密钥
方法一:
gpg --export-secret-key 公钥ID > private.key
gpg --export 私钥ID > private.key
方法二:
公钥文件(.gnupg/pubring.gpg)以二进制形式储存,armor参数可以将其转换为ASCII码显示。
gpg --armor --output public-key.txt --export 公钥ID
output参数指定输出文件名(public-key.txt)。
类似地,export-secret-keys参数可以转换私钥。
gpg --armor --output private-key.txt --export-secret-keys 私钥ID
2.2.2 导入密钥
gpg --import [密钥文件]
2.2 GPG密钥免密输入
gpg 在新的版本中,在对私钥进行操作的时候(签名、导入等)需要输入密钥的密码,但是有时候我们并不希望弹框输入密码,更希望是通过脚本等方式执行 gpg 的一些操作,方法如下:
gpg --import --pinentry-mode loopback --batch --passphrase password private-file.key
当对文件签名时也需要输入密码,我们可以用以下命令来免交互输入密码签名:
gpg --sign --pinentry-mode loopback --batch --passphrase password file
2.3 删除公钥/私钥
先删除私钥:
gpg --delete-secret-keys 私钥ID
再删除公钥
gpg --delete-keys 公钥id
通过上述两步操作即可删除系统中导入的gpg密钥
3 deb包签名
请参见2.2小节部分,文件免密签名
4 apt-key
由于我们不光从ubuntu官方源获取包,有时也会从本地构建的仓库中获取包,所以为了支持从本地源获取deb文件,需要将本地仓库的密钥文件导入到apt管理工具
apt-key命令用于管理Debian Linux系统中的软件包密钥。每个发布的Debian软件包都是通过密钥认证的,apt-key命令用来管理Debian软件包密钥。
使用格式:apt-key [参数]
add filename | 从文件中加载新的密钥到被信任的密钥中 |
del kid | 从被信任的密钥中删除指定密钥 |
export keyed | 将指定的密钥输出到标准输出设备 |
exportall | 将所有密钥输出到标准输出设备 |
list | 显示被信任密钥 |
finger | 显示被信任密钥的指纹 |
adv | 向pgp传递高级特性 |
update | 通过key包来更新key |
通常我们需要将签名本地文件的gpg密钥,导入到apt管理工具中:
apt-key add keyname
参考
https://blog.csdn.net/hao134838/article/details/104796604