环境:ubuntu-server-20.04.3
生成密钥
1,产生密钥对
key的属性:key name,user id,key id,key fingerprint
# gpg --key-gen 【快速产生key pair,默认RSA,密钥长度3072,有效期1年】
# gpg --generate-key【快速产生key pair,默认RSA,密钥长度3072,有效期1年】
# gpg --full-generate-key 【完整的交互式生成,由用户选择非对称密码算法、长度、有效期等等】
查看密钥
查看公钥
# gpg -k
# gpg --list-keys
查看私钥
# gpg -K
# gpg --list-secret-keys
删除密钥
要求先删除私钥,再删除公钥,删除私钥的过程会多次确认。
# gpg --delete-secret-keys 086A83E4920E558197652B55CEB674AF2FF7EB12
# gpg --delete-keys 086A83E4920E558197652B55CEB674AF2FF7EB12
密钥导出及导入
产生的密钥对(/root/.gnupg/pubring.kbx)以二进制形式储存,armor参数可以将其转换为ASCII码显示。
导出公钥
# gpg --armor --export server_rsa_key_for_root > server_rsa_key_for_root.pub
--armor 简写为 -a,将其转换为ASCII码显示
可以根据key name、key id、用户id等信息导出。
导出私钥
将私钥写入server_rsa_key_for_root.private文件,导出私钥时,需要输入产生密钥时指定的密码短语(用于保护私钥)。
# gpg -a --export-secret-keys 51E66699474095C81412BE0882F11361EE05E67A > server_rsa_key_for_root.private
加密
公钥加密,私钥解密
# gpg --recipient server_rsa_key_for_root --output demo.en.txt --encrypt demo.txt
解密
# gpg --output demo.de.txt --decrypt demo.en.txt
--output选项位于中间时不报错,位于命令行参数最后,报错 可以使用重定向操作代替
私钥解密的过程需要输入密钥保护短语。
签名
私钥签名,公钥验证。
gpg目前支持三种形式的签名:
1,内容与签名不分离,二进制形式保存(--sign)
2,内容与签名不分离,ASCII形式保存(--clearsign)
3,内容与签名分开存储。(--detach-sign)
# gpg --sign demo.txt
运行上面的命令后,当前目录下生成demo.txt.gpg文件,这就是签名后的文件。这个文件默认采用二进制储存,如果想生成ASCII码的签名文件,可以使用clearsign参数。
# gpg --clearsign demo.txt
运行上面的命令后 ,当前目录下生成demo.txt.asc文件,后缀名asc表示该文件是ASCII码形式的。
3,如果想生成单独的签名文件,与文件内容分开存放,可以使用detach-sign参数。
# gpg --detach-sign demo.txt
运行上面的命令后,当前目录下生成一个单独的签名文件demo.txt.sig。该文件是二进制形式的,如果想采用ASCII码形式,要加上armor参数。
4,
# gpg --armor --detach-sign demo.txt
验证
# gpg --verify demo.txt.asc demo.txt
# gpg --verify demo.txt.gpg
同时加密和签名
用发送者的私钥签名,用接受者的公钥加密。
gpg --local-user [发送者ID] --recipient [接收者ID] --armor --sign --encrypt demo.txt
local-user参数指定用发送者的私钥签名
recipient参数指定用接收者的公钥加密
armor参数表示采用ASCII码形式显示
sign参数表示需要签名
encrypt参数表示指定源文件
这步操作,需要导入接受者的公钥到发送者机器(发送者要用接受者的公钥加密),同时需要导入发送者的公钥到接收者的机器(接受者要用发送者的公钥验证签名)。