03-gpg(证书管理 )详细范例

$ gpg --help

gpg (GnuPG) 2.4.4

libgcrypt 1.10.3

Copyright © 2024 g10 Code GmbH

License GNU GPL-3.0-or-later https://gnu.org/licenses/gpl.html

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.

Home: /home/hjw/.gnupg

支持的算法:

公钥: RSA, ELG, DSA, ECDH, ECDSA, EDDSA

密文: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,

CAMELLIA128, CAMELLIA192, CAMELLIA256

散列: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224

压缩: 不压缩, ZIP, ZLIB, BZIP2

语法:gpg [选项] [文件]

签名、检查、加密或解密

默认的操作依输入数据而定

命令:

-s, --sign 生成一份签名

--clear-sign 生成一份明文签名

-b, --detach-sign 生成一份分离的签名

-e, --encrypt 加密数据

-c, --symmetric 仅使用对称密文加密

-d, --decrypt 解密数据(默认)

--verify 验证签名

-k, --list-keys 列出密钥

--list-signatures 列出密钥和签名

--check-signatures 列出并检查密钥签名

--fingerprint 列出密钥和指纹

-K, --list-secret-keys 列出私钥

--generate-key 生成一个新的密钥对

--quick-generate-key 快速生成一个新的密钥对

--quick-add-uid 快速添加一个新的用户标识

--quick-revoke-uid 快速吊销一个用户标识

--quick-set-expire 快速设置一个过期日期

--full-generate-key 完整功能的密钥对生成

--generate-revocation 生成一份吊销证书

--delete-keys 从公钥钥匙环里删除密钥

--delete-secret-keys 从私钥钥匙环里删除密钥

--quick-sign-key 快速签名一个密钥

--quick-lsign-key 快速本地签名一个密钥

--quick-revoke-sig 快速吊销一个密钥签名

--sign-key 签名一个密钥

--lsign-key 本地签名一个密钥

--edit-key 签名或编辑一个密钥

--change-passphrase 更改密码

--export 导出密钥

--send-keys 将密钥导出到一个公钥服务器上

--receive-keys 从公钥服务器上导入密钥

--search-keys 在公钥服务器上搜索密钥

--refresh-keys 从公钥服务器更新所有密钥

--import 导入/合并密钥

--card-status 打印卡片状态

--edit-card 更改卡片上的数据

--change-pin 更改卡片的 PIN

--update-trustdb 更新信任数据库

--print-md 打印消息摘要

--server 以服务器模式运行

--tofu-policy VALUE 设置一个密钥的 TOFU 政策

控制诊断输出的选项:

-v, --verbose 详细模式

-q, --quiet 尽量减少提示信息

--options FILE 从 FILE 中读取选项

--log-file FILE 将服务器模式的日志写入到 FILE

控制配置的选项:

--default-key NAME 使用 NAME 作为默认的私钥

--encrypt-to NAME 同时给以 NAME 为名称的用户标识加密

--group SPEC 设置电子邮件别名

--openpgp 使用严格的 OpenPGP 行为

-n, --dry-run 不做任何更改

-i, --interactive 覆盖前提示

控制输出的选项:

-a, --armor 创建 ASCII 字符封装的输出

-o, --output FILE 写输出到 FILE

--textmode 使用规范的文本模式

-z N 设置压缩等级为 N (0 为禁用)

控制密钥导入导出的选项:

--auto-key-locate MECHANISMS 通过邮件地址定位密钥时使用机制 MECHANISMS

--auto-key-import 从签名中导入缺少的密钥

--include-key-block 在签名中包含公钥

--disable-dirmngr 禁用对 dirmngr 的所有访问

指定密钥的选项:

-r, --recipient USER-ID 为 USER-ID 加密

-u, --local-user USER-ID 使用 USER-ID 来签名或者解密

(请参考手册页以获得所有命令和选项的完整列表)

例子:

-se -r Bob [文件] 为用户 Bob 签名和加密

--clear-sign [文件] 创建一个明文签名

--detach-sign [文件] 创建一个分离签名

--list-keys [名字] 列出密钥

--fingerprint [名字] 显示指纹

请向 https://bugs.gnupg.org 报告程序缺陷。

请向 i18n-zh@googlegroups.com 邮件列表反映简体中文的翻译问题或建议。


以下是基于 gpg (GnuPG) 2.4.4 的详细使用范例整理,涵盖密钥管理、加密解密、签名验证等常见场景,并附上实际命令示例和说明。


1. 密钥管理

1.1 生成密钥对

快速生成密钥(推荐)
bash 复制代码
gpg --quick-generate-key "用户名 <邮箱>" rsa4096 never
  • 参数说明

    • rsa4096:密钥算法和长度。
    • never:密钥永不过期(可替换为 1y 表示 1 年后过期)。
  • 示例

    bash 复制代码
    gpg --quick-generate-key "Alice <alice@example.com>" rsa4096 1y
完整生成密钥(自定义参数)
bash 复制代码
gpg --full-generate-key
  • 按提示选择密钥类型、长度、过期时间等。

1.2 列出密钥

列出所有公钥
bash 复制代码
gpg --list-keys
  • 显示指纹

    bash 复制代码
    gpg --list-keys --with-fingerprint
  • 示例输出

    复制代码
    pub   rsa4096 2024-01-01 [SC] [expires: 2025-01-01]
          1234ABCD5678EFGH90IJ1234KL5678MN90PQ12RS
    uid           [ultimate] Alice <alice@example.com>
    sub   rsa4096 2024-01-01 [E] [expires: 2025-01-01]
列出所有私钥
bash 复制代码
gpg --list-secret-keys

1.3 导出密钥

导出公钥(ASCII 格式)
bash 复制代码
gpg --export --armor "用户名 <邮箱>" > pubkey.asc
  • 示例

    bash 复制代码
    gpg --export --armor "Alice <alice@example.com>" > alice_pub.asc
导出私钥(谨慎操作!)
bash 复制代码
gpg --export-secret-keys --armor "用户名 <邮箱>" > privkey.asc

1.4 导入密钥

从文件导入
bash 复制代码
gpg --import pubkey.asc
  • 从公钥服务器导入

    bash 复制代码
    gpg --keyserver keyserver.ubuntu.com --recv-keys 1234ABCD

1.5 删除密钥

删除公钥
bash 复制代码
gpg --delete-keys "用户名 <邮箱>"
删除私钥
bash 复制代码
gpg --delete-secret-keys "用户名 <邮箱>"

2. 加密与解密

2.1 加密文件

使用公钥加密
bash 复制代码
gpg --encrypt --recipient "用户名 <邮箱>" 文件名
  • 示例

    bash 复制代码
    gpg --encrypt --recipient "Alice <alice@example.com>" secret.txt
    • 生成加密文件 secret.txt.gpg
对称加密(无公钥)
bash 复制代码
gpg --symmetric 文件名
  • 输入密码后生成 文件名.gpg

2.2 解密文件

使用私钥解密
bash 复制代码
gpg --decrypt 加密文件.gpg > 解密后文件.txt
  • 示例

    bash 复制代码
    gpg --decrypt secret.txt.gpg > secret_decrypted.txt
解密对称加密文件
bash 复制代码
gpg --decrypt 对称加密文件.gpg > 解密后文件.txt
  • 输入密码后解密。

3. 签名与验证

3.1 生成签名

创建明文签名
bash 复制代码
gpg --clear-sign 文件名
  • 生成 文件名.asc(包含原文和签名)。

  • 示例

    bash 复制代码
    gpg --clear-sign document.txt
创建分离签名
bash 复制代码
gpg --detach-sign 文件名
  • 生成 文件名.sig(仅签名)。
直接签名并加密
bash 复制代码
gpg --sign --encrypt --recipient "用户名 <邮箱>" 文件名
  • 示例

    bash 复制代码
    gpg --sign --encrypt --recipient "Alice <alice@example.com>" message.txt

3.2 验证签名

验证明文签名
bash 复制代码
gpg --verify 文件名.asc
  • 示例

    bash 复制代码
    gpg --verify document.txt.asc
验证分离签名
bash 复制代码
gpg --verify 文件名.sig 文件名
  • 示例

    bash 复制代码
    gpg --verify document.sig document.txt

4. 密钥服务器操作

4.1 搜索密钥

bash 复制代码
gpg --keyserver keyserver.ubuntu.com --search-keys "用户名或邮箱"
  • 示例

    bash 复制代码
    gpg --keyserver keyserver.ubuntu.com --search-keys "alice@example.com"

4.2 上传密钥

bash 复制代码
gpg --keyserver keyserver.ubuntu.com --send-keys 1234ABCD

4.3 刷新密钥

bash 复制代码
gpg --keyserver keyserver.ubuntu.com --refresh-keys

5. 高级操作

5.1 编辑密钥

bash 复制代码
gpg --edit-key "用户名 <邮箱>"
  • 交互命令
    • adduid:添加用户 ID。
    • revuid:吊销用户 ID。
    • expire:修改过期时间。
    • trust:设置信任级别。
    • quit:退出编辑。

5.2 生成吊销证书

bash 复制代码
gpg --generate-revocation --armor "用户名 <邮箱>" > revocation.asc
  • 用于吊销丢失或泄露的密钥。

5.3 查看密钥详细信息

bash 复制代码
gpg --show-keys --keyid-format LONG 1234ABCD
  • 参数说明
    • --keyid-format LONG:显示完整指纹(40 位)。
    • --keyid-format SHORT:显示短 KEY_ID(8 位)。

6. 实际场景示例

场景 1:加密文件并发送给 Alice

  1. 加密文件:

    bash 复制代码
    gpg --encrypt --recipient "Alice <alice@example.com>" secret.txt
  2. 发送 secret.txt.gpg 给 Alice。

场景 2:验证收到的签名文件

  1. 下载 document.txt.ascdocument.txt

  2. 验证签名:

    bash 复制代码
    gpg --verify document.txt.asc document.txt

场景 3:备份私钥

  1. 导出私钥:

    bash 复制代码
    gpg --export-secret-keys --armor "Alice <alice@example.com>" > alice_priv.asc
  2. alice_priv.asc 存储在安全位置。


7. 注意事项

  1. 保护私钥:私钥泄露会导致加密数据被解密,签名被伪造。
  2. 备份密钥 :建议备份 .gnupg 目录或导出密钥文件。
  3. 验证公钥:从可信渠道获取公钥,避免中间人攻击。
  4. 过期密钥:定期更新密钥的过期时间。

通过以上命令,您可以完成 GPG 的常见操作,包括密钥管理、加密解密、签名验证等。根据实际需求选择合适的命令和参数。

相关推荐
Aimyon_363 小时前
MinerU Docker自定义版本部署
运维·docker·容器
莱茶荼菜3 小时前
Ubuntu 20.04 系统库管理详细教程
linux·运维·ubuntu
迅为电子4 小时前
嵌入式Linux新手入门:北京迅为3568开发板驱动开发第二章helloworld 驱动实验
linux·运维·驱动开发
xiaotao1315 小时前
unity hub在ubuntu 22.0.4上启动卡住
ubuntu·unity·游戏引擎
nono牛6 小时前
MTK平台详解`adb devices`输出的序列号组成
android·linux·adb·智能手机
kyle~7 小时前
机器视觉---Intel RealSense SDK 2.0 开发流程
运维·c++·windows·深度相机·intel realsense
catoop7 小时前
Linux 自动清理临时文件配置
linux·服务器
Xの哲學7 小时前
Linux eMMC子系统深度解析:从硬件协议到内核实现
linux·网络·算法·架构·边缘计算
数智大号7 小时前
超云发布R2425存储服务器:以全栈自研引领国产存储新方向
运维·服务器