在 github 中使用 GPG

269 阅读3分钟

如何在 GitHub 中使用 GPG

image.png

GPG 输入密码校验

如何使用

在 web 开发过程中,GPG 常见的用处在于与 github 绑定,从而让后面的代码提交更加安全可靠。

以下是 GPG 常见的一些操作命令

  • SETP1: 生成一个 GPG 钥匙

    **$ gpg --full-generate-key** # 核心命令
    gpg (GnuPG) 2.4.2; Copyright (C) 2023 g10 Code GmbH
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
    
    请选择您要使用的密钥类型:
       (1) RSA 和 RSA
       (2) DSA 和 Elgamal
       (3) DSA(仅用于签名)
       (4) RSA(仅用于签名)
       (9) ECC(签名和加密) *默认*
      (10) ECC(仅用于签名)
     (14)卡中现有密钥
    **您的选择是? 1**
    RSA 密钥的长度应在 1024 位与 4096 位之间。
    您想要使用的密钥长度?(3072)
    请求的密钥长度是 3072 位
    请设定这个密钥的有效期限。
             0 = 密钥永不过期
          <n>  = 密钥在 n 天后过期
          <n>w = 密钥在 n 周后过期
          <n>m = 密钥在 n 月后过期
          <n>y = 密钥在 n 年后过期
    **密钥的有效期限是?(0)**
    密钥永远不会过期
    **这些内容正确吗? (y/N) y**
    
    GnuPG 需要构建用户标识以辨认您的密钥。
    
    真实姓名: nanfeng
    电子邮件地址: xxxx@xx.io
    注释: 南风老胡
    您正在使用‘utf-8’字符集。
    您选定了此用户标识:
        “nanfeng (南风老胡) <xxxxxx@xx.io>”
    
    更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)? o
    我们需要生成大量的随机字节。在质数生成期间做些其他操作(敲打键盘
    、移动鼠标、读写硬盘之类的)将会是一个不错的主意;这会让随机数
    发生器有更好的机会获得足够的熵。
    我们需要生成大量的随机字节。在质数生成期间做些其他操作(敲打键盘
    、移动鼠标、读写硬盘之类的)将会是一个不错的主意;这会让随机数
    发生器有更好的机会获得足够的熵。
    gpg: 目录‘/Users/hujunping/.gnupg/openpgp-revocs.d’已创建
    gpg: 吊销证书已被存储为‘/Users/hujunping/.gnupg/openpgp-revocs.d/FB9030xxxxxxxxxxxxxxxxxxxxxx10B850BA.rev’
    公钥和私钥已经生成并被签名。
    
    pub   rsa3072 2023-06-27 [SC]
          FB90302xxxxxxxxxxxxxxxxxxxxxxxx50BA
    uid                      nanfeng (南风老胡) <xxxxxx@xx.io>
    sub   rsa3072 2023-06-27 [E]
    
  • SETP2: [可选步骤] 按 ID 输出一个钥匙

    **$ gpg --export FB90XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0BA**
    ��dv�
          �n)�`���(f�Z�S������j�V��f}���ƚ;SOD)06c(f�j��jv��Ѯ��2h;�&~2�\/
                                                                        �`U�.0WO<�B���{�w�)�9�N�YY�c��X�)d
    ,��uG�G3,�Kz�VF"�@*�2�
    �r�a���Ǐ              �
    W����<���<���<���<���<���<���?Lgk
    9OAk�q����m>���i^�-
                       ��d���<zJ������<���<���<
    ����xr�~h�0�                             #@
                +J`1w�e���W���͟"-��I:-��{\��I|MP����|�+�*�/b��96cLu�
                                                                     ����BB����
                                                                               ���"��+��$</�`�]'�)L��^�Q`�Ξ
    �§���|	:��/oH5#�#nanfeng (南风老胡) <xxxx@xx.io>�;!�0.�B_��WQSfPdv�
                                                                                  "
    
           �
    	QSfP��JJz��U9f��9+f���z:�+� ����FGf#1�<�?�Z��B1G��O61�`vwu���vlUJ
            �Ǝe���&be���<���<���<���<���<T��+(o�����W&���q�{bw����<���<���<���<���<���<���<���<ݡ!R��M'㕠��QL��>m
    ���	�뉹�dv�
                    �t�"7+�·CNř�;Ũ'�Ʊ�
    τkl�����<���<���<���<���<"b���q����t��ί�<6��Q��^��
                                                                      ���P� !�0.�B_��WQSfPdvQSfP���
                     ��VP6m#f�!��{9���@�|'X&1kt��
                                                    �wT? ����;C8WAuC����6D�(4r��Q�7~�R@�x��������&�x�PuJ6�wCa�[I�Ug��X���x�ˮ�Xs�?4��ɻ�XDS�(`%�W@�1�	�OS\x�<�٣��^^>�Ǜ�I[�7`M���ޫc3���B�K^� *\i:)��#~�cϙ]�|ᥚ%&�ۻ�<�̓E7N���A��b �wٰ>;R
    �j�6�u�Lx�������������������������������������������������^�%
    
  • SETP3: [可选步骤] 引入一个钥匙

    gpg --import [Filename]
    
  • SETP4: [可选步骤] 取消一个钥匙

    $ gpg --gen-revoke FBXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0BA
    
    sec  rsa3072/51XXXXXXXXXXXXXA 2023-06-27 nanfeng (南风老胡) <xx@xx.io>
    
    要为这个密钥创建一个吊销证书吗?(y/N) y
    请选择吊销的原因:
      0 = 未指定原因
      1 = 密钥已泄漏
      2 = 密钥被替换
      3 = 密钥不再使用
      Q = 取消
    (也许您会想要在这里选择 1)
    您的决定是什么? 3
    请输入描述(可选);以空白行结束:
    > 不要了
    >
    吊销原因:密钥不再使用
    不要了
    这样可以吗? (y/N) y
    已强行使用 ASCII 字符封装过的输出。
    -----BEGIN PGP PUBLIC KEY BLOCK-----
    Comment: This is a revocation certificate
    
    iQG/BCABCAApFiEEABCAApFiEEABCAApFiEEABCAApFiEEABCAApFBCAApFiEEABCAApFiEEA
    BCAApFiEEABCAApFBCAApFiEEABCAApFiEEABCAApFiEEABCAApFBCAApFiEEABCAApFiEEAB
    CAApFiEEABCAApFBCAApFiEEABCAApFiEEABCAApFiEEABCAApFBCAApFiEEABCAApFiEEAB
    CAApFiEEABCAApFBCAApFiEEABCAApFiEEABCAApFiEEABCAApFBCAApFiEEABCAApFiEEA
    BCAApFiEEABCAApFBCAApFiEEABCAApFiEEABCAApFiEEABCAApFBCAApFiEEABCAApFiEEABC
    AApFiEEABCAApFiEEABCAApFiEEABCAApFiEEABCAApFiEEABCAApFiEEABCAApFiEEABCAAp
    FiEEABCAApFiEEABCAApFiEEABCAApFiEEABCAApFiEEABCAApFiEEABCAApFiEEABCAApFiE
    EABCAApFiEEABCAApFiEE+oac9Df
    =FE18
    -----END PGP PUBLIC KEY BLOCK-----
    已创建吊销证书。
    
    请把这个文件转移到一个您可以藏起来的介质上;如果坏人获取到了这
    份证书的话,那么他就能使用它并让您的密钥无法继续使用。把此证书
    打印出来再存放到安全的地方也是很好的方法,以免您的保存媒体变得
    不可读。但是千万小心:您机器上的打印系统可能会在打印过程中储存
    这些数据,并使得其他人看到!
    
  • SETP4: 查看钥匙列表

    $ gpg --list-keys
    
    gpg: 正在检查信任度数据库
    gpg: marginals needed: 3  completes needed: 1  trust model: pgp
    gpg: 深度:0  有效性:  2  已签名:  0  信任度:0-,0q,0n,0m,0f,2u
    [keyboxd]
    ---------
    pub   rsa3072 2023-06-27 [SC]
          F1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX21E7
    uid             [ 绝对 ] nanfeng (南风老胡) <xx@xx.io>
    sub   rsa3072 2023-06-27 [E]
    
    pub   rsa3072 2023-06-27 [SC]
          F1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX21E7
    uid             [ 绝对 ] nanfeng (南风老胡) <xx@xx.io>
    sub   rsa3072 2023-06-27 [E]
    
  • SETP5: 查看钥匙详情

    **$ gpg --armor --export F1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1E7**
    -----BEGIN PGP PUBLIC KEY BLOCK-----
    
    mQGNBGSaeYYBDADTeLX3SaeYYBDADTeLX3SaeYYBDADTewtMMU9f4dzF5oFVcddr
    mQGNBGSaeYYBDADTeLX3SaeYYBDADTeLX3SaeYYBDADTewtMMU9f4dzF5oFVcddr
    mQGNBGSaeYYBDADTeLX3SaeYYBDADTeLX3SaeYYBDADTewtMMU9f4dzF5oFVcddr
    mQGNBGSaeYYBDADTeLX3SaeYYBDADTeLX3SaeYYBDADTewtMMU9f4dzF5oFVcddr
    mQGNBGSaeYYBDADTeLX3SaeYYBDADTeLX3SaeYYBDADTewtMMU9f4dzF5oFVcddr
    mQGNBGSaeYYBDADTeLX3SaeYYBDADTeLX3SaeYYBDADTewtMMU9f4dzF5oFVcddr
    mQGNBGSaeYYBDADTeLX3SaeYYBDADTeLX3SaeYYBDADTewtMMU9f4dzF5oFVcddr
    mQGNBGSaeYYBDADTeLX3SaeYYBDADTeLX3SaeYYBDADTewtMMU9f4dzF5oFVcddr
    mQGNBGSaeYYBDADTeLX3SaeYYBDADTeLX3SaeYYBDADTewtMMU9f4dzF5oFVcddr
    mQGNBGSaeYYBDADTeLX3SaeYYBDADTeLX3SaeYYBDADTewtMMU9f4dzF5oFVcddr
    mQGNBGSaeYYBDADTeLX3SaeYYBDADTeLX3SaeYYBDADTewtMMU9f4dzF5oFVcddr
    mQGNBGSaeYYBDADTeLX3SaeYYBDADTeLX3SaeYYBDADTewtMMU9f4dzF5oFVcddr
    mQGNBGSaeYYBDADTeLX3SaeYYBDADTeLX3SaeYYBDADTewtMMU9f4dzF5oFVcddr
    mQGNBGSaeYYBDADTeLX3SaeYYBDADTeLX3SaeYYBDADTewtMMU9f4dzF5oFVcddr
    mQGNBGSaeYYBDADTeLX3SaeYYBDADTeLX3SaeYYBDADTewtMMU9f4dzF5oFVcddr
    mQGNBGSaeYYBDADTeLX3SaeYYBDADTeLX3SaeYYBDADTewtMMU9f4dzF5oFVcddr
    mQGNBGSaeYYBDADTeLX3SaeYYBDADTeLX3SaeYYBDADTewtMMU9f4dzF5oFVcddr
    mQGNBGSaeYYBDADTeLX3SaeYYBDADTeLX3SaeYYBDADTewtMMU9f4dzF5oFVcddr
    mQGNBGSaeYYBDADTeLX3SaeYYBDADTeLX3SaeYYBDADTewtMMU9f4dzF5oFVcddr
    mQGNBGSaeYYBDADTeLX3SaeYYBDADTeLX3SaeYYBDADTewtMMU9f4dzF5oFVcddr
    mQGNBGSaeYYBDADTeLX3SaeYYBDADTeLX3SaeYYBDADTewtMMU9f4dzF5oFVcddr
    mQGNBGSaeYYBDADTeLX3SaeYYBDADTeLX3SaeYYBDADTewtMMU9f4dzF5oFVcddr
    mQGNBGSaeYYBDADTeLX3SaeYYBDADTeLX3SaeYYBDADTewtMMU9f4dzF5oFVcddr
    mQGNBGSaeYYBDADTeLX3SaeYYBDADTeLX3SaeYYBDADTewtMMU9f4dzF5oFVcddr
    mQGNBGSaeYYBDADTeLX3SaeYYBDADTeLX3SaeYYBDADTewtMMU9f4dzF5oFVcddr
    mQGNBGSaeYYBDADTeLX3SaeYYBDADTeLX3SaeYYBDADTewtMMU9f4dzF5oFVcddr
    mQGNBGSaeYYBDADTeLX3SaeYYBDADTeLX3SaeYYBDADTewtMMU9f4dzF5oFVcddr
    mQGNBGSaeYYBDADTeLX3SaeYYBDADTeLX3SaeYYBDADTewtMMU9f4dzF5oFVcddr
    mQGNBGSaeYYBDADTeLX3SaeYYBDADTeLX3SaeYYBDADTewtMMU9f4dzF5oFVcddr
    mQGNBGSaeYYBDADTeLX3SaeYYBDADTeLX3SaeYYBDADTewtMMU9f4dzF5oFVcddr
    mQGNBGSaeYYBDADTeLX3SaeYYBDADTeLX3SaeYYBDADTewtMMU9f4dzF5oFVcddr
    mQGNBGSaeYYBDADTeLX3SaeYYBDADTeLX3SaeYYBDADTewtMMU9f4dzF5oFVcddr
    mQGNBGSaeYYBDADTeLX3SaeYYBDADTeLX3SaeYYBDADTewtMMU9f4dzF5oFVcddr
    Dxy/EwELowGibylBDk1bSWiPBqGjiv2eDIifYa9uygiTfclBIY6Hh1PwdxsaKZbN
    l/0zT0iHu1S1e+HYRcvsAQ5S6bXhzBDhMjJmq5Y0RHUOezf6wSDx846k27VcWWIU
    2TQ+FJ0JTRJSuEzib+sC2SrC
    =TGc0
    -----END PGP PUBLIC KEY BLOCK----
    
  • SETP6: 绑定到 Github

    添加一个 GPG github.com/settings/gp…

image.png

  • SETP7: git commit -S -m

    git config --global commit.gpgsign true
    git config --global user.signingkey AB768623874367
    
    # 如果卡住没反应
    gpgconf --kill gpg-agent
    

通过工具[简单快捷]

  1. 首先下载 GPGtools

    GPG Suite

  2. 创建一个私钥

    Untitled

  3. 将公钥上传

  4. 复制私钥填入 github gpg

  5. 打开 sourcetree > 打开仓库 > 设置 > 安全 > 选择好私钥 > 确定

image.png

  1. 后面的提交都可以了

学习资料

GPG入门教程 - 阮一峰的网络日志

遇到过的问题

解决GPG错误 gpg: agent_genkey failed: No such file or directory - 徐风吟 - 博客园

  • 如果出现一直命令行没办法执行 git commit 的话,很有可能是安装了两个版本的 GPG,可以尝试卸载一个版本去解决问题。通过 GPGtools 的方式,其实是 gpg2 做的。

相关链接

文章来源:laohu.notion.pet/%E5%A6%82%E…