gpg使用

https://blog.csdn.net/weixin_42559321/article/details/82147888

https://www.cnblogs.com/wanghongli/archive/2018/01/08/8241809.html

 

 

rpm2cpio *.rpm | cpio -imd          #解压一个rpm包

rpm -ivh *.rpm  --force               #强制安装这个rpm包

rpm -ivh *.rpm  --oldpackage          #版本降级,在已经安装高版本后,降级

rpm -ivh *.rpm  --nodeps               #忽略依赖关系,强制安装

rpm -Fvh *.rpm                             #只升级

rpm -Uvh *.rpm                            #安装或升级

rpm -e *.rpm                                #删除指定的rpm包,并把数据库中的记录删除(也可以用来删除钥匙)

rpm -qpi *.rpm                             #查看当前包详细信息,参数p就是查看没有安装的信息

rpm -qpl *.rpm                             #查看没有安装的包安装后生成的文件及位置

rpm -qpi vsftpd*.rpm                       #查看未安装包的详细信息

rpm -qf /路径/命令(文件)              #可以查找这个安装了的命令(文件)来自什么包

rpm -qa packagename                     #列出所有已经安装的包一般和grep一起用来查询

rpm -ql  packagename                   #查看安装的软件包生成的文件及位置

rpm -qi packagename                           #查看已经安装包的详细信息

rpm -qd packagename                          #查看这个包的帮助文档

rpm -qc  packagename                         #查看这个包的配置文件

rpm -q --scripts packagename              #查看rpm包安装后执行的脚本

rpm -q --changelog packagename         #查看rpm升级的原因

rpm -V packagename                           #安装后校验,对比和刚刚安装的区别

rpm -K *.rpm                                     #安装前校验md5值,判断rpm包是否做过更改,根据yum的gpg钥匙来判断

rpm --import keyname                        #导入指定的钥匙

rpm -qa gpg-pubkey                           #查看钥匙

rpm -vvK *.rpm                                 #查看包的完整性

rpm -qp --scripts *.rpm                     #查看包安装前的脚本(用来查看这个包是否有问题);postinstall后面是安装前的脚本;postuninstall 后面是卸载后的脚本

rpm -qi gpg-pubkey-2fa658e0-45700c69  #查看钥匙的详细信息

rpm -e gpg-pubkey-2fa658e0-45700c69   #删除系统公钥

rpm --import RPM-GPG-KEY          #导入公钥
/var/lib/rpm/Pubkeys          #系统保存公钥路径

/var/ftp/pub/rhel6/dvd/repodata            #里面保存的是安装包的数据库的仓库

/var/lib/rpm                   #rpm数据库所在的位子

如何去除rpm的公钥

一不小心导入了同名称但是不同内容的公钥,然后在再次导入正确的公钥的时候,发现已经导入不了,提示内容如下:

[cnangel@localhost cnangel]$sudo rpm --import RPM-GPG-KEY-cnangel
error: RPM-GPG-KEY-cnangel: import failed.

而查看rpm的选项没有delete相关操作;重新import并使用--force选项,则提示:

rpm: only installation, upgrading, rmsource and rmspec may be forced

查看路径/etc/pki/rpm-gpg/下面也没有刚才错误的导入公钥文件,该如何删除错误的公钥而导入正确的公钥呢?
经过查看rpm和gpg相关文档,可以用如下方案解决:

[cnangel@localhost ~]$rpm -q gpg-pubkey
gpg-pubkey-57bbccba-4a6f97af
gpg-pubkey-16ca1a56-4a100959
gpg-pubkey-a3a882c1-4a1009ef

原来,经过查询获得gpg-pubkey的公钥就是这些结果,不过无法显示是哪个文件导入的,不过还是有版本,这个查询接口的排序是时间先后顺序,所以可以推算刚才导入错误的文件是第几个,然后删除即可:

[cnangel@localhost ~]$sudo rpm -e --allmatches gpg-pubkey-16ca1a56-4a100959

 

1.GPG简介

  1991年,程序员Phil Zimmermann为了避开政府的监视,开发了加密软件PGP。因为这个软件非常好用,迅速流传开来成为许多程序员的必备工具。但是,它是商业软不能自由使用。所以,自由软件基金会决定,开发一个PGP的替代品取名为GnuPG,因此GPG就诞生了。GPG是GNU Privacy Guard的缩写,是自由软件基金会的GNU计划的一部分。它是一种基于密钥的加密方式,使用了一对密钥对消息进行加密和解密,来保证消息的安全传输。一开始,用户通过数字证书认证软件生成一对公钥和私钥。任何其他想给该用户发送加密消息的用户,需要先从证书机构的公共目录获取接收者的公钥,然后用公钥加密信息,再发送给接收者。当接收者收到加密消息后,他可以用自己的私钥来解密,而私钥是不应该被其他人拿到的。

2.安装GPG

Linux操作系统

   如今大多数的linux发行版都默认包含了gpg,可用如下命令进行检查:

# gpg --version

 

 

  若看到如图所示的版本信息,就可直接使用了。否则,你需要从你的发行版软件仓库里安装GPG。

(1)Mac操作系统:

安装brew命令

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安装gnupg

$ brew install gnupg

 

 

 

(2)Windows操作系统:

  Windows下可以借助gpg4win软件来实现密钥的生成,具体过程自己摸索,下载地址:https://www.gpg4win.org/

 

3.生成密钥

# gpg --gen-key

 

 

  生成密钥时会出现一大段文字:先是关于软件的介绍和一些版权信息,然后询问你选择哪种加密算法,我选择默认的RSA and RSA,因为目前来说,RSA算法是安全性最强的,它可以用来加密和解密,其他的只能给信息签名。

  这一步会询问密钥长度,默认是2048,直接回车就ok,也可以自己选择长度。如下所示:

  接下来询问你密钥的有效期,默认值0代表永不过期,我选择默认值。然后会让你确认是否正确。选择正确则输入y,下一步要求你输入个人信息,软件通过真实姓名、Email地址和注释来构造用户ID,其中注释可以为空。

  此时用户ID就生成了,系统会向你确认信息是否需要修改:输入N修改姓名,C修改注释,E修改Email,O表示确认,Q退出。我输入字母o确认。

  接下来系统会要求你输入一个口令用里保护你的私钥,强烈建议添加口令!

  然后系统会提示“需要生成大量随机字节”,你可以随意进行一些操作,看看网页啊,打打字什么的,“这会得到足够的熵”(熵在物理学中是微观状态混乱度的度量)。

  如下所示:此时你的公、私钥已经生成并签名!

  其中B9F82B1D是用户ID的hash,可以代替用户ID。

第一行显示公钥文件名(pubring.gpg),

第二行显示公钥特征(4096位,Hash字符串和生成时间),

第三行显示"用户ID",

第四行显示私钥特征。

最后,建议再生成一个撤销证书,以便以后密钥作废时,请求公钥服务器撤销你的公钥:

# gpg --ken-revoke [用户ID]

 

 

4.密钥管理

(1)列出密钥

# gpg --list-keys

 

 

(2)上传公钥至密钥服务器

  密钥服务器是用来发布你的公钥,并将其分发到其他人的服务器,这样其他用户可以轻松的根据你数据库中的名字(或者e-mail地址)来获取你的公钥,并给你发送加密信息。避免了把公钥直接拷贝给其他人的过程。

1.上传你的公钥到秘钥服务器:

# gpg --send-keys  [your pubID]  --keyserver [keyservers.address.com]

(需要把keyservers.address.com替换成你选择的服务器(或者用mit.edu,它会跟其他服务器做同步))

2.加密文件

法一:

# gpg -o encrypted_file.gpg --encrypt -r key-id original.file

命令解释:

(1)-o encrypted_file.gpg = 指定输出文件

(2)--encrypt = 做加密

(3)-r = 接收者的KEY-ID,比如这里就填你朋友的KEY-ID。

(4)original.file = 指定要加密的文件

法二:

# gpg --recipient [your pubID]--output out.file  --encrypt original.file

 

 

 

 

 

 

(3)上传公钥

# gpg  --send-keys [用户ID]  --keyserver hkp://subkeys.pgp.net 

 

 

(4)在另一台服务器上搜索刚才上传的公钥

# gpg --search-keys [用户ID]

 

 

5.加密文件

  加密之前首先得知道对方的公钥,用公钥来加密文件,对方用自己的私钥来解密。可用对方的邮箱搜索他的公钥

# gpg --list-key wangd8836@gmail.com

 

 

加密法一:

# gpg --recipient 49FD19FB --output haha.txt --encrypt haha

 

 

加密法二:

# gpg -o encrypted_520.haha --encrypt -r 49FD19FB  haha 

 

 

将加密后的文件传至另一台服务器

6.解密文件

# gpg --decrypt filename.gpg

 

 

7.删除密钥

(1)查看密钥

# gpg --list-keys

 

 

(2)删除公钥:

# gpg --delete-secret-keys 71FBED38

 

 

(3)查看一次密钥:

# gpg --list-keys

 

 

(4)发现要删除的密钥还在,因为你仅仅删除了私钥而已。此时再删除公钥:

# gpg --delete-key 71FBED38

 

 

(5)再次查看密钥:

# gpg --list-keys

 

 

 

8.签名

# gpg --clearsign haha.txt

 

 

  以上操作会在当前目录下生成一个名为vps.asc的文件,--clearsign参数表示生成ASCII形式的签名文件,而使用--sign参数生成的文件名为vps.gpg,以二进制形式存储。

  通过--verify参数使用对方的公钥进行签名验证:

# gpg --sign haha.txt

 

 

9.验证文件完整性

# gpg --verify haha.txt.asc

 

 

若出现上图所示内容,则说明文件传输过程中没有被修改过

 

====================================================

常见加密算法工具

md5: 128bits、 sha1: 160bits、 sha224

sha256、 sha384、 sha512

 

 常用工具

md5sum

sha1sum

sha512sum

openssl

gpg

• rpm -V

需要先导入光盘中的GPG-KEY:

#rpm --import /dvd/RPM-GPG-KEY-CentOS-6

或安装好的系统的

#rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#rpm -K /dvd/Packages/kernel-2.6.32-696.el6.x86_64.rpm

/dvd/Packages/kernel-2.6.32-696.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK

https://blog.csdn.net/weixin_34409703/article/details/92925888

https://blog.csdn.net/dingxiu8587/article/details/102160996

生成签名文件:

gpg --gen-key

导入密钥文件

gpg --import key-pri

查看秘钥

gpg --list-keys

导出公钥
gpg -a --export -o gpg-key-pub

配置宏

echo "%_gpg_name {GPG_NAME}" > ~/.rpmmacros
root@koji:~/gpg # cat ~/.rpmmacros                                                                                                                                                                                              ↵
%_signature gpg
%_gpg_path ~/.gnupg
%_gpg_name 5FF77AA7
%_gpgbin /usr/bin/gpg

签名,使用以下两种方式sign

rpm --addsign XXX.rpm
rpm --resign XXX.rpm

签名完成后,删掉私钥,不要泄露私钥

gpg --delete-secret-keys {key-id}

可以是另一台服务器
导入签名的公钥

rpm --import {url}/gpg-key-pub

验证一个签名过的包

rpm -K XXX.rpm
rpm -Kv XXX.rpm
rpm --checksig XX.rpm

# cat /etc/yum.repos.d/server.repo  添加修改如下
[redhatlinux]
name=redhat
baseurl=http://10.10.3.160/
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/gpg-key-pub

 

 

可以利用加密算法对文件进行计算以便发现是否被篡改

md5sum --check 保存的计算结果文件

#sha512sum --check file.sum

b: FAILED

sha512sum: WARNING: 1 of 1 computed checksum did NOT match

1、使用gpg实现对称加密与解密  gpg (GnuPG) 1.4.5 如果是2.0以上版本,需要gpg2命令

 对称加密file文件

#gpg -c sshd_config

输入2次密码之后,会生成一个sshd_config.gpg

#file sshd_config.gpg

sshd_config.gpg: data

解密此加密过的file,输入正确的密码即可

-o 是指定输出位置,必须放在前面。

#gpg -o /tmp/sshd -d sshd_config.gpg

 

2、使用gpg工具实现非对称公钥加密与解密 

gpg --gen-key

gpg (GnuPG) 2.0.14; Copyright (C) 2009 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)

Your selection? 1

RSA keys may be between 1024 and 4096 bits long.选择加密长度

What keysize do you want? (2048) 默认回车

Requested keysize is 2048 bits

Please specify how long the key should be valid.选择密钥有效期

0 = key does not expire

<n>  = key expires in n days

<n>w = key expires in n weeks

<n>m = key expires in n months

<n>y = key expires in n years

Key is valid for? (0) 1y

Key expires at Sun 13 Jan 2019 08:02:46 PM CST

Is this correct? (y/N) y 是否确认以上信息

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

Real name: gpg 保存一个名字

Name must be at least 5 characters long 至少需要5个字符

Real name: gpg-key-a

Email address: aa@aa.com 邮件地址

Comment:  备注

You selected this USER-ID:

"gpg-key-a <aa@aa.com>"

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

再接输入2次密码

然后,加密过程就根据加密长度,会让你随机输入字符,总这就是你不断的敲东西啦。可以开多个终端窗口,批量发送信息。挺有意思的。

这个操作在图形界面下只需要动动鼠标就好了

生成了一对密钥。

#ls ~/.gnupg/

gpg.conf  private-keys-v1.d  pubring.gpg  pubring.gpg~  random_seed  secring.gpg  trustdb.gpg

pubring.gpg 公钥

secring.gpg 私钥

#gpg -k

/root/.gnupg/pubring.gpg

------------------------

pub   2048R/4CBA6F6A 2018-01-13 [expires: 2019-01-13]

uid                  gpg-key-a <aa@aa.com>

sub   2048R/215FAF14 2018-01-13 [expires: 2019-01-13]

 

公钥查看

[root@localhost wubo]# gpg --list-keys
/root/.gnupg/pubring.gpg
------------------------
pub   2048R/ED2593A4 2020-04-29
uid                  wu_bo (hello world) <wu_bo@hoperun.com>
sub   2048R/9991B3E2 2020-04-29

私钥查看

[root@localhost wubo]# gpg --list-secret-keys
/root/.gnupg/secring.gpg
------------------------
sec   2048R/ED2593A4 2020-04-29
uid                  wu_bo (hello world) <wu_bo@hoperun.com>
ssb   2048R/9991B3E2 2020-04-29

ED2593A4 代表了uid 用户

公钥导出

命令格式:gpg -a --export 公私钥生成的用户 > 导出的公钥文件路径和文件名

命令样式:[root@localhost wubo]# gpg -a --export ED2593A4> gpg-public.asc  在当前的路径下面会生成一个gpg-public.asc的公钥文件,将上面的这个公钥文件gpg-public.asc给到需要加密的服务器一方即可

私钥导出

命令格式

gpg -a --export-secret-keys 公私钥生成的用户 >导出的私钥文件路径和文件名

 

命令样式:[root@localhost wubo]# gpg -a --export-secret-keys ED2593A4>gpg-pri.asc

当前路径下面会生成一个私钥的文件gpg-pri.asc

 

 

导出公钥

#gpg -a --export -o gpg-a-pubkey

 

在另外一个系统导入公钥

#gpg --import gpg-a-pubkey

#gpg -k   能看到导入的公钥

/root/.gnupg/pubring.gpg

------------------------

pub   2048R/4CBA6F6A 2018-01-13 [expires: 2019-01-13]

uid                  gpg-key-a <aa@aa.com>

sub   2048R/215FAF14 2018-01-13 [expires: 2019-01-13]

 

加密文件

#gpg -e -r gpg-key-a gpg.conf     -r 是指定加密的公钥名

回到导出公钥的主机,执行解密

#gpg -d gpg.conf.gpg

 

成功

 

 

OpenSSL

开源项目

三个组件:

openssl: 多用途的命令行工具,包openssl

libcrypto: 加密算法库,包openssl-libs

libssl:加密模块应用库,实现了ssl及tls,包nss,openssl命令:

两种运行模式:交互模式和批处理模式

直接使用openssl回车进入交互模式,输入?列出命令菜单。

命令分为:

标准命令Standard commands

消息摘要命令Message Digest commands

加密命令Cipher commands

openssl命令

帮助:man enc ,man dgst

对称加密

语法:

openssl enc

常用选项有:

-in filename: 指定要加密的文件存放路径

-out filename: 指定加密后的文件存放路径

-salt: 自动插入一个随机数作为文件内容加密,默认选项

-e: 可以指明一种加密算法,若不指的话将使用默认加密算法。支持的算法在man中

-d: 解密,解密时也可以指定算法,若不指定则使用默认算法,但一定要与加密时的 算法一致

-a/-base64: 使用-base64位编码格式

示例

#openssl enc -e -des3 -a -in issue -out issue.des3

enter des-ede3-cbc encryption password:

Verifying - enter des-ede3-cbc encryption password:

#ll

-rw-r--r-- 1 root root 33 Jan 14 16:11 issue

-rw-r--r-- 1 root root 78 Jan 14 16:25 issue.des3

#cat issue.des3

U2FsdGVkX1+eOWAl9ZWtfyLzZY/4+256W1QduATECmFFuhYhc9pX2HZAe9AQ9l/o

K3aVnlttg4s=

解密

#openssl enc -d -des3 -a -in issue.des3 -out issue2

单向加密:

openssl dgst

常用选项有:

-out filename: 将加密的内容保存到指定文件中

示例

#openssl dgst issue   默认是MD5

MD5(issue)= 1ad7bcb8447ccaaeb490feea29c6f6df

#openssl dgst -sha512 issue

生成用户密码:

openssl passwd

帮助:man sslpasswd

常用选项

-salt string:加入随机数,最多8位随机数

-in file:对输入的文件内容进行加密

-stdion:对标准输入的内容进行加密

openssl passwd -1 -salt SALT(最多8位)

openssl passwd -1 –salt centos

生成随机数:

openssl rand

帮助:man sslrand

openssl rand -base64 NUM

NUM: 表示字节数

生成密钥对:

openssl genrsa

帮助:man genrsa

openssl rand -base64 NUM

NUM: 表示字节数

#openssl genrsa -out issue.key -des3 2048  

#(umask 066;openssl genrsa -out issue.key -des3 2048)  使用这绿色的参数是非对称加密

生成后必须放到一个安全的地方,并且修改权限不让其他人查看

使用非对称加密后的key会有这些字样:Proc-Type: 4,ENCRYPTED

将加密key解密

#openssl rsa -in issue.key -out issue.key2

从私钥中提取出公钥

常用选项:

-in filename:指明私钥文件

-out filename:指明将提取出的公钥保存至指定文件中

-pubout:根据私钥提取出公钥

#openssl rsa -in issue.key -pubout -out issue.key.pub

cat issue.key.pub

-----BEGIN PUBLIC KEY-----

====================================

https://www.cnblogs.com/LiuYanYGZ/p/9433796.html
http://www.ruanyifeng.com/blog/2013/07/gpg.html
1、加密

    1)刘言机器: 用王老师公钥加密gpg --recipient DBDA805F --output ToTeacherWang.helloword.en.gpg --encrypt helloword.txt 

    2)王老师机器: 王老师用自己的私钥(输入密码)解密gpg --decrypt ToTeacherWang.helloword.en.gpg 

    2)王老师机器: 王老师用自己的私钥(输入密码)解密gpg           ToTeacherWang.helloword.en.gpg  (--decrypt是可以省略的)(会在当前文件夹下生成ToTeacherWang.helloword.en文件)

    

2、签名

    1)刘言机器: 用刘言的私钥(输入密码)签名gpg --sign helloword.txt 

    1)刘言机器: 用刘言的私钥(输入密码)签名gpg --local-user 8E0D3717 --output ToTeacherWang.helloword.signed2.gpg  --sign helloword.txt   (local-user参数指定用发信者的私钥签名)

    2)王老师机器: 在自己的库中查找哪个公钥能对应上 gpg --verify ToTeacherWang.helloword.signed.gpg

    

3、加密 + 签名    

    1)刘言机器: gpg --recipient DBDA805F --output ToTeacherWang.helloword.signed.en.gpg --sign --encrypt helloword.txt 

    1)刘言机器: gpg --local-user 8E0D3717 --recipient DBDA805F --output ToTeacherWang.helloword.signed.en.gpg --sign --encrypt helloword.txt 

    

    2)王老师机器解密 + 验签:  gpg  --decrypt    ToTeacherWang.helloword.signed.en.gpg   (输出到屏幕)

    2)王老师机器:  gpg              ToTeacherWang.helloword.signed.en.gpg  (--decrypt是可以省略的)(会在当前文件夹下生成ToTeacherWang.helloword.signed.en文件)



4、导出公钥

gpg   --armor   --output public-key.liuyan.txt   --export 8E0D3717 

gpg --export -a 'Fernando Aleman' > RPM-GPG-KEY-faleman  



5、导入公钥  

gpg --import /root/pubring.TeacherWang.gpg

gpg --import public-key.liuyan.txt



 6、删除公钥

gpg --delete-key 8E0D3717





7、查询公钥

gpg --list-keys

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值