gpg 密钥生成、导入、导出、自动输入密码

   

目录

一、系统环境

二、常用命令(以签名密钥为例)

(1)生成密钥

(2)列出私钥

(3)列出公钥

(4)导出公钥

(5)导出私钥

(6)导入公钥/私钥

(7)删除公钥

(8)删除私钥

三、在对私钥进行操作时,避免弹窗输入密码

(1)直接输入密码

(2)将密码输入到文件里


    这里总结一下 gpg 密钥的使用,在最新的版本 2.2.x (CentOS 8)相较于之前的 2.0.x (CentOS 7)版本还是有较大的变化的,还有记录一下自动输入密钥密码的方式,虽然这种方式不提倡(不安全),但是在一些特殊情况下,比如:写脚本执行 gpg 操作的时候,总不能每次弹框手动输入命令吧,下面就来总结下。

一、系统环境

    CentOS Linux release 8.0.1905 (Core)

    注意:CentOS 7 中 gpg 的版本为 2.0.x,CentOS 8 中 gpg 为 2.2.x,还是有很大变化的,比如:签名密钥的导入和导出都需要输入密码。

二、常用命令(以签名密钥为例)

(1)生成密钥

    简单方式:gpg --generate-key 或 --gen-key : 生成 gpg 密钥,这种方式有一些参数是默认的;

[root@192 ~]# gpg --gen-key
gpg (GnuPG) 2.2.9; Copyright (C) 2018 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.

Note: Use "gpg --full-generate-key" for a full featured key generation dialog.

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

真实姓名:temp-key
电子邮件地址:temp-key@163.com
您选定了这个用户标识:
    “temp-key <temp-key@163.com>”

Change (N)ame, (E)mail, or (O)kay/(Q)uit? O
我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。
我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。
gpg: 密钥 AB38BACE635A064C 被标记为绝对信任
gpg: revocation certificate stored as '/root/.gnupg/openpgp-revocs.d/6C8A15CECD3DCC2741A7C590AB38BACE635A064C.rev'
公钥和私钥已经生成并经签名。

pub   rsa2048 2020-07-27 [SC] [有效至:2022-07-27]
      6C8A15CECD3DCC2741A7C590AB38BACE635A064C
uid                      temp-key <temp-key@163.com>
sub   rsa2048 2020-07-27 [E] [有效至:2022-07-27]

[root@192 ~]#

   详细的方式:gpg --full-gen-key 或 --full-generate-key : 生成gpg密钥,有详细的配置参数;

[root@localhost ~]# gpg --full-generate-key
gpg (GnuPG) 2.2.9; Copyright (C) 2018 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 (仅用于签名)
您的选择? 4
RSA 密钥长度应在 1024 位与 4096 位之间。
您想要用多大的密钥尺寸?(2048)
您所要求的密钥尺寸是 2048 位
请设定这把密钥的有效期限。
         0 = 密钥永不过期
      <n>  = 密钥在 n 天后过期
      <n>w = 密钥在 n 周后过期
      <n>m = 密钥在 n 月后过期
      <n>y = 密钥在 n 年后过期
密钥的有效期限是?(0) 0
密钥永远不会过期
以上正确吗?(y/n)y

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

真实姓名:Search2016
电子邮件地址:Search2016@163.com
注释:Search2016
您选定了这个用户标识:
    “Search2016 (Search2016) <Search2016@163.com>”

更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)?O
我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。
gpg: 密钥 894EC1384177F643 被标记为绝对信任
gpg: directory '/root/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/root/.gnupg/openpgp-revocs.d/00BF891AC03B546DE9FCEDDC894EC1384177F643.rev'
公钥和私钥已经生成并经签名。

请注意这把密钥还不能用来加密,您必须先用“--edit-key”指令
生成用于加密的子钥。
pub   rsa2048 2020-07-26 [SC]
      00BF891AC03B546DE9FCEDDC894EC1384177F643
uid                      Search2016 (Search2016) <Search2016@163.com>

[root@localhost ~]#

(2)列出私钥

    gpg -K 或 --list-secret-keys : 查看私钥,参数后面没有指定私钥,则输出所有私钥;

[root@192 ~]# gpg -K
/root/.gnupg/pubring.kbx
------------------------
sec   rsa2048 2020-07-27 [SC]
      8AC0AB86C34ADC6ED110A5A9E6730F4374866065
uid           [ 绝对 ] Search2016 (Search2016) <Search2016@163.com>

(3)列出公钥

    gpg -k 或 --list-public-keys : 查看公钥,参数后面没有指定公钥,则输出所有公钥;

[root@192 ~]# gpg -k
/root/.gnupg/pubring.kbx
------------------------
pub   rsa2048 2020-07-27 [SC]
      8AC0AB86C34ADC6ED110A5A9E6730F4374866065
uid           [ 绝对 ] Search2016 (Search2016) <Search2016@163.com>

(4)导出公钥

        gpg -a -o public-file.key --export keyId : 导出公钥keyId 到 文件 public-file.key中;

    其中:

    -a 为 --armor 的简写,表示密钥以ASCII的形式输出,默认以二进制的形式输出;

    -o 为 --output 的简写,指定写入的文件;

[root@192 ~]# gpg -a -o public-file.key --export 8AC0AB86C34ADC6ED110A5A9E6730F4374866065

(5)导出私钥

     gpg -a -o private-file.key --export-secret-keys keyId : 导出私钥 keyId 到文件 private-file.key中,导出的时候需要输入密钥密码;

    其中,导出私钥需要输入保护私钥的密码;

[root@192 ~]# gpg -a -o private-file.key --export-secret-keys 8AC0AB86C34ADC6ED110A5A9E6730F4374866065

(6)导入公钥/私钥

    gpg --import public-file.key / private-file.key : 导入公钥或私钥,其中,导入私钥需要输入保护私钥的密码;

[root@192 ~]# gpg --import public-file.key
gpg: 密钥 E6730F4374866065:公钥“Search2016 (Search2016) <Search2016@163.com>”已导入
gpg: 合计被处理的数量:1
gpg:           已导入:1
[root@192 ~]# gpg -k
/root/.gnupg/pubring.kbx
------------------------
pub   rsa2048 2020-07-27 [SC]
      8AC0AB86C34ADC6ED110A5A9E6730F4374866065
uid           [ 未知 ] Search2016 (Search2016) <Search2016@163.com>
[root@192 ~]# gpg --import private-file.key
gpg: 密钥 E6730F4374866065:“Search2016 (Search2016) <Search2016@163.com>”未改变
gpg: 密钥 E6730F4374866065:私钥已导入
gpg: 合计被处理的数量:1
gpg:           未改变:1
gpg:       读取的私钥:1
gpg:       导入的私钥:1
[root@192 ~]#

(7)删除公钥

    gpg --delete-keys keyId : 删除公钥;

[root@192 ~]# gpg --delete-keys 6C8A15CECD3DCC2741A7C590AB38BACE635A064C

(8)删除私钥

    gpg --delete-secret-keys : 删除私钥;

[root@192 ~]# gpg --delete-secret-keys 6C8A15CECD3DCC2741A7C590AB38BACE635A064C

三、在对私钥进行操作时,避免弹窗输入密码

     gpg 在新的版本中,在对私钥进行操作的时候(签名、导入等)需要输入密钥的密码,但是有时候我们并不希望弹框输入密码,更希望是通过脚本等方式执行 gpg 的一些操作,方法如下:

(1)直接输入密码

    gpg --import  --pinentry-mode loopback --batch --passphrase password  private-file.key

[root@localhost ~]# gpg --import --pinentry-mode loopback --batch --passphrase 123456 private-file.key
gpg: 密钥 E6730F4374866065:“Search2016 (Search2016) <Search2016@163.com>”未改变
gpg: 密钥 E6730F4374866065:私钥已导入
gpg: 合计被处理的数量:1
gpg:           未改变:1
gpg:       读取的私钥:1
gpg:       导入的私钥:1
[root@localhost ~]#

(2)将密码输入到文件里

    gpg --import  --pinentry-mode loopback --batch --passphrase-file password-file  private-file.key

[root@localhost ~]# gpg --import --pinentry-mode loopback --batch --passphrase-file password-file private-file.key
gpg: 密钥 E6730F4374866065:“Search2016 (Search2016) <Search2016@163.com>”未改变
gpg: 密钥 E6730F4374866065:私钥已导入
gpg: 合计被处理的数量:1
gpg:           未改变:1
gpg:       读取的私钥:1
gpg:       导入的私钥:1
[root@localhost ~]#

文件  password-file 第一行为设置的密码,这两种方式都不提倡使用,如果真要使用建议使用第二中。

  • 13
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Docker GPG 密钥用于验证和加密 Docker 镜像和其他相关文件。您可以使用以下步骤生成 Docker GPG 密钥: 1. 首先,确保您已经安装了 GPG 工具。如果没有,请根据您的操作系统下载并安装 GPG。 2. 打开终端或命令提示符,并输入以下命令来生成新的 GPG 密钥对: ``` gpg --gen-key ``` 您将会被要求提供一些信息,例如您的姓名和电子邮件地址。 3. GPG 将会生成一个密钥对,包括一个公钥和一个私钥。请记住生成密钥时使用的密码,因为您将需要在以后使用它。 4. 您可以使用以下命令列出您的 GPG 密钥对: ``` gpg --list-keys ``` 在列表中,您会看到一个带有 "pub" 字样的行,这是您的公钥。 5. 导出您的公钥,以便在 Docker 中使用。使用以下命令导出公钥: ``` gpg --export -a "Your Name" > docker.gpg ``` 将 "Your Name" 替换为您在生成密钥时使用的姓名。 6. 现在,您可以将 `docker.gpg` 文件复制到 Docker 守护程序的 `~/.docker` 目录中。 7. 在 Docker 配置文件 `~/.docker/config.json` 中添加以下内容,以告诉 Docker 使用 GPG 密钥: ``` { "credHelpers": { "gcr.io": "gcr", "eu.gcr.io": "gcr", "asia.gcr.io": "gcr", "staging-k8s.gcr.io": "gcr", "marketplace.gcr.io": "gcr" }, "experimental": "enabled", "gpgVerify": true } ``` 这将启用 GPG 密钥验证功能。 现在,您已经生成了 Docker GPG 密钥并配置了 Docker 使用它进行验证。请注意,这只是一种加强 Docker 安全性的方法之一,并且适用于需要保护 Docker 镜像和文件的特殊情况。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值