如何使用 docker trust key generate 命令创建签名密钥

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本次实验中,你将学习如何使用 gpg 命令生成签名密钥对,这是安全通信和软件分发的基础步骤。你将生成一个新的 RSA 密钥对,并指定密钥大小和有效期,同时在过程中提供必要的用户 ID 信息。

生成密钥后,你将学习如何为新密钥输入并确认密码短语,这是一项至关重要的安全措施。然后,你将验证生成的公钥文件,确保其正确性。最后,你将探索如何在特定目录中生成密钥对,展示管理密钥的灵活性。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker/ContainerOperationsGroup -.-> docker/exec("Execute Command in Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") subgraph Lab Skills docker/exec -.-> lab-555252{{"如何使用 docker trust key generate 命令创建签名密钥"}} docker/create -.-> lab-555252{{"如何使用 docker trust key generate 命令创建签名密钥"}} end

生成新的签名密钥对

在这一步中,你将学习如何使用 gpg 命令生成新的签名密钥对。签名密钥对由私钥和公钥组成。私钥用于签署数据,公钥用于验证签名。这是安全通信和软件分发中的一个基本概念。

首先,打开你的终端。你已经位于 ~/project 目录中。

要生成新的密钥对,请使用以下命令:

gpg --full-generate-key

运行该命令后,系统会提示你选择所需的密钥类型。在本次实验中,我们将使用默认选项,即 RSA and RSA。按 Enter 键接受默认选项。

gpg (GnuPG) 2.2.27; Copyright (C) 2021 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

接下来,系统会询问你密钥的大小。密钥越大,安全性越高,但生成和使用所需的时间也越长。在本次实验中,我们将使用默认的 3072 位密钥大小。按 Enter 键接受默认选项。

RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (3072)

然后,系统会询问密钥的有效期。在本次实验中,我们将设置密钥有效期为一年。输入 1y 并按 Enter 键。

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

输入 y 并按 Enter 键,确认密钥将在显示的日期过期。

Key expires at ...
Is this correct? (y/N) y

现在,你需要提供用户 ID 信息。此信息与你的公钥相关联,有助于他人识别你。

首先,输入你的真实姓名。在本次实验中,你可以使用 LabEx User。输入 LabEx User 并按 Enter 键。

Real name: LabEx User

接下来,输入你的电子邮件地址。在本次实验中,你可以使用 [email protected]。输入 [email protected] 并按 Enter 键。

Email address: [email protected]

你可以选择添加注释。在本次实验中,你可以留空注释字段。按 Enter 键跳过注释。

Comment:

检查你输入的信息。如果信息正确,输入 O 表示确认并按 Enter 键。如果你需要修改信息,输入 C 表示修改,或输入 Q 表示退出。

You selected this USER-ID:
    "LabEx User <[email protected]>"

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

最后,系统会提示你输入密码短语以保护你的私钥。这是一个至关重要的安全步骤。选择一个你能记住的强密码短语。你将在下一步中再次输入此密码短语。

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator more entropy.

然后,系统将生成密钥对。这可能需要一些时间。

输入并确认新密钥的密码短语

在上一步中,你启动了生成新 GPG 密钥对的过程。此过程的最后一步是为你的私钥输入并确认一个密码短语。这个密码短语对于保护你的私钥不被未经授权使用至关重要。

现在你应该会看到一个对话框或终端提示,要求你输入密码短语。

┌─────────┤ Please enter the passphrase to protect your new key ├─────────┐
│                                                                         │
│ Passphrase: _________________________________________                   │
│                                                                         │
│        <OK>                                          <Cancel>           │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘

在“Passphrase”字段中输入一个强密码短语。请记住这个密码短语,因为每当你使用私钥时(例如进行签名)都需要用到它。在本次实验中,你可以使用像 mypassphrase123 这样简单的密码短语。输入 mypassphrase123 并按 Enter 键或点击 <OK>

然后,系统会要求你再次输入密码短语以进行确认。这有助于确保你正确输入了密码短语。

┌─────────┤ Please re-enter the passphrase to protect your new key ├─────────┐
│                                                                          │
│ Repeat passphrase: _________________________________________             │
│                                                                          │
│        <OK>                                           <Cancel>            │
│                                                                          │
└──────────────────────────────────────────────────────────────────────────┘

在“Repeat passphrase”字段中再次输入相同的密码短语(mypassphrase123),然后按 Enter 键或点击 <OK>

确认密码短语后,GPG 将完成密钥对的生成。你应该会看到类似以下的输出,表明密钥生成已完成:

gpg: key ... marked as ultimately trusted
gpg: revocation certificate stored as '/home/labex/.gnupg/openpgp-revocs.d/....rev'
public and secret key created and signed.

pub   rsa3072 2023-10-27 [SC]
      ...
uid           [ultimate] LabEx User <[email protected]>
sub   rsa3072 2023-10-27 [E]

输出显示了你新生成的密钥的相关信息,包括密钥类型(rsa3072)、创建日期、密钥 ID(...)以及你提供的用户 ID(LabEx User <[email protected]>)。pub 行指的是公钥,sub 行指的是子密钥(用于加密)。

你现在已成功生成了一个 GPG 密钥对,并使用密码短语保护了你的私钥。

验证生成的公钥文件

在前面的步骤中,你已成功生成了一个 GPG 密钥对。现在,让我们验证公钥是否已正确生成且可用。公钥是你要与他人共享的,以便他们可以验证你的签名或为你加密消息。

要列出密钥环中的公钥,请使用 gpg --list-keys 命令。由于你在生成密钥时指定了“LabEx User”作为名称,因此可以过滤输出以仅显示你的密钥。

gpg --list-keys "LabEx User"

你应该会看到类似以下的输出,确认你的公钥已存在:

pub   rsa3072 2023-10-27 [SC]
      ...
uid           [ultimate] LabEx User <[email protected]>
sub   rsa3072 2023-10-27 [E]

此输出显示了你的公钥的详细信息,包括密钥类型(pub)、算法(rsa3072)、创建日期(2023-10-27)、功能([SC] 表示签名和认证)、密钥 ID(...)、用户 ID(LabEx User <[email protected]>)以及加密子密钥的信息(sub)。

要将你的公钥导出到文件中,可以使用 gpg --output <filename> --armor --export <user ID> 命令。--armor 选项以 ASCII 装甲格式输出密钥,这是一种人类可读的文本格式。让我们将“LabEx User”的公钥导出到当前目录(~/project)中名为 labex_user_public.key 的文件中。

gpg --output labex_user_public.key --armor --export "LabEx User"

此命令将在你的 ~/project 目录中创建一个名为 labex_user_public.key 的文件,其中包含你的公钥。

你可以使用 cat 命令查看此文件的内容:

cat labex_user_public.key

输出将显示 ASCII 装甲格式的公钥块,以 -----BEGIN PGP PUBLIC KEY BLOCK----- 开头,以 -----END PGP PUBLIC KEY BLOCK----- 结尾。

-----BEGIN PGP PUBLIC KEY BLOCK-----

... (your public key content) ...

-----END PGP PUBLIC KEY BLOCK-----

这确认了你的公钥已成功导出到文件中。现在,你可以将此文件与需要验证你的签名或为你加密数据的人共享。

在指定目录中生成密钥对

在前面的步骤中,你生成了一个 GPG 密钥对,它被存储在默认的 GPG 主目录(~/.gnupg)中。有时,你可能希望在不同的位置生成并存储密钥,也许是为了特定项目,或者是为了将它们与主密钥环分开。

在这一步中,你将学习如何生成 GPG 密钥对,并指定一个不同的目录来存储密钥文件。

首先,让我们创建一个新目录,用于存储新的密钥对。我们将在你的 ~/project 目录下创建一个名为 mykeys 的目录。

mkdir ~/project/mykeys

现在,要生成密钥对并将其存储在 ~/project/mykeys 目录中,你需要在 gpg 命令中使用 --homedir 选项。这个选项告诉 GPG 使用指定的目录作为其主目录,而不是默认的主目录。

使用以下命令启动密钥生成过程,并指定 ~/project/mykeys 目录:

gpg --homedir ~/project/mykeys --full-generate-key

你将经历与步骤 1 和步骤 2 相同的密钥生成过程。

  1. 选择密钥类型:Enter 键选择默认的 RSA and RSA
  2. 你想要的密钥大小是多少?Enter 键选择默认的 3072
  3. 密钥的有效期是多久? 输入 1y 表示一年,然后按 Enter 键。
  4. 这样正确吗? 输入 y 并按 Enter 键。
  5. 真实姓名: 输入 Project User 并按 Enter 键。
  6. 电子邮件地址: 输入 [email protected] 并按 Enter 键。
  7. 注释:Enter 键留空。
  8. 更改 (N)ame、(C)omment、(E)mail 还是 (O)kay/(Q)uit? 输入 O 并按 Enter 键。
  9. 输入密码短语: 输入一个密码短语(例如 projectpassphrase456),然后按 Enter 键。
  10. 重复密码短语: 再次输入相同的密码短语(projectpassphrase456),然后按 Enter 键。

完成这些步骤后,GPG 将生成密钥对,并将必要的文件存储在 ~/project/mykeys 目录中。

你可以通过列出该主目录中的密钥来验证密钥是否在指定目录中生成:

gpg --homedir ~/project/mykeys --list-keys "Project User"

你应该会看到类似以下的输出,显示你刚刚生成的密钥:

gpg: directory '/home/labex/project/mykeys' created
gpg: keybox '/home/labex/project/mykeys/pubring.kbx' created
pub   rsa3072 2023-10-27 [SC]
      ...
uid           [ultimate] Project User <[email protected]>
sub   rsa3072 2023-10-27 [E]

注意那些表明 GPG 目录和密钥盒是在 ~/project/mykeys 中创建的行。这确认了密钥是在指定位置生成的。

总结

在这个实验中,你学习了如何使用 gpg 命令生成一个新的签名密钥对。这个过程包括选择密钥类型(默认为 RSA 和 RSA)、指定密钥大小(默认为 3072 位)以及设置密钥的有效期(本实验中设置为一年)。你还学习了如何为新密钥输入并确认密码短语,以保护私钥。最后,你验证了生成的公钥文件,并尝试在指定目录中生成密钥对,从而了解了用于安全通信和软件分发的私钥和公钥的基本概念。