如何在 GitHub 中使用 GPG
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** ��d�v� �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��96�c�Lu� ����BB���� ���"��+��$</�`�]'�)L��^�Q`�Ξ �§���| :��/oH5#�#nanfeng (南风老胡) <xxxx@xx.io>�;!�0.�B�_��WQ�Sf�P�d�v� " � Q�Sf�P��J �Jz��U�9�f��9+f���z:�+� ����F�G�f�#1�<�?�Z��B1G��O�6�1�`v�w�u���v�l�U�J �Ǝe���& �be���<���<���<���<���<T��+(o�����W&���q�{bw����<���<���<���<���<���<���<���<ݡ!R��M'㕠��QL��>m ��� �뉹�d�v� �t�"7+�·C�Nř�;Ũ'�Ʊ� τk�l�����<���<���<���<���<"b���q����t��ί�<6��Q��^�� ���P� !�0.�B�_��WQ�Sf�P�d�v� Q�Sf�P��� ��VP�6m�#f�!��{9���@�|'X&1�kt�� �wT? ����;C8WA�u�C����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…
-
SETP7: git commit -S -m
git config --global commit.gpgsign true git config --global user.signingkey AB768623874367 # 如果卡住没反应 gpgconf --kill gpg-agent
通过工具[简单快捷]
-
首先下载 GPGtools
-
创建一个私钥
-
将公钥上传
-
复制私钥填入 github gpg
-
打开 sourcetree > 打开仓库 > 设置 > 安全 > 选择好私钥 > 确定
- 后面的提交都可以了
学习资料
遇到过的问题
解决GPG错误 gpg: agent_genkey failed: No such file or directory - 徐风吟 - 博客园
- 如果出现一直命令行没办法执行 git commit 的话,很有可能是安装了两个版本的 GPG,可以尝试卸载一个版本去解决问题。通过 GPGtools 的方式,其实是 gpg2 做的。