如何将gpg子键添加到GitLab
GitLab 9.5.0增加了对检查提交的gpg签名的支持,并在提交哈希()旁边显示验证状态。但是,此版本不验证使用子键签署的提交(,计划支持) 是否可以在gpg中导出子键并将其转换为主键,以便将这些主键添加到GitLab?编辑2017年10月 由于版本10.1,GitLab对子键具有本机支持。您只需添加 完全公钥。如果您的密钥的电子邮件地址已在GitLab中验证,则使用子密钥签名的提交将显示为“已验证”如何将gpg子键添加到GitLab,gitlab,gnupg,Gitlab,Gnupg,GitLab 9.5.0增加了对检查提交的gpg签名的支持,并在提交哈希()旁边显示验证状态。但是,此版本不验证使用子键签署的提交(,计划支持) 是否可以在gpg中导出子键并将其转换为主键,以便将这些主键添加到GitLab?编辑2017年10月 由于版本10.1,GitLab对子键具有本机支持。您只需添加 完全公钥。如果您的密钥的电子邮件地址已在GitLab中验证,则使用子密钥签名的提交将显示为“已验证” 原始答案 虽然原始密钥环不应更改,但我建议您首先备份所有(公开和秘密)密钥环!这个解决方
原始答案 虽然原始密钥环不应更改,但我建议您首先备份所有(公开和秘密)密钥环!这个解决方案是相当实验性的强> 创建一个目录,例如
sub2primary
,并将其更改为该目录,因为以下命令将创建大量临时文件,这可能会弄乱您的主目录。我将采用以下设置
frank@7777a258a48e:~/sub2primary$ gpg2 --list-keys
/home/frank/.gnupg/pubring.kbx
------------------------------
pub rsa1024/34171358 2017-08-30 [SC]
uid [ultimate] Frank <frank@example.com>
sub rsa1024/320752EA 2017-08-30 [S]
sub rsa1024/BBA338AD 2017-08-30 [E]
这两个命令创建两个文件,每个文件对应一个数据包。您可以使用pgpdump
检查数据包。我们对匹配pub*.public\u子键
和sec*.secret\u子键
的文件感兴趣。检查其中一个文件会发现
frank@7777a258a48e:~/sub2primary$ pgpdump sec000004-007.secret_subkey
Old: Secret Subkey Packet(tag 7)(517 bytes)
...
这确实是一个私钥。如果您有多个子密钥(例如,一个用于签名,一个用于加密),我不确定如何识别正确的子密钥。在本例中,带有*000004-*
的数据包将包含用于签名的密钥。(如果有疑问,请选择一个,如果是错误的,请重新开始。)
编辑:gpg2——列出数据包
显示有关数据包的更多信息,包括密钥id。这有助于选择正确的数据包
转换为主键
其次,我们需要将这些子密钥包(这里是pub000004-014.public\u subkey
和sec000004-007.secret\u subkey
)转换成主键包。为此,您需要一个十六进制编辑器(vim-b
就足够了)并修改每个文件中的第一个字节。将公开子密钥的第一个字节替换为\x99
,将秘密子密钥的第一个字节替换为\x95
。如果使用vim-b
,可以从主键文件pub000001-006.public\u-key
和sec000001-005.secret\u-key
复制第一个字节。(不要把公开和秘密混为一谈!)
执行此步骤后,pgpdump
显示键现在是主键
frank@7777a258a48e:/~/sub2primary$ pgpdump sec000004-007.secret_subkey
Old: Secret Key Packet(tag 5)(517 bytes)
...
导入主键
接下来,我们需要欺骗gpg
来导入这些损坏的数据包(它们既没有用户id,也没有自签名)。要做到这一点,只需复制它们,以便它们可以用作钥匙圈
frank@7777a258a48e:~/sub2primary$ cp pub000004-014.public_subkey ~/.gnupg/tmp
frank@7777a258a48e:~/sub2primary$ cp sec000004-007.secret_subkey ~/.gnupg/sec_tmp
如下一次打印所示,可以告诉gpg
使用这些修改过的键
frank@7777a258a48e:~/sub2primary$ gpg2 --no-default-keyring --keyring tmp --secret-keyring sec_tmp --list-secret-keys
/home/frank/.gnupg/tmp
----------------
sec rsa1024/320752EA 2017-08-30 [SCEA]
frank@7777a258a48e:~/sub2primary$ gpg2 --no-default-keyring --keyring tmp --secret-keyring sec_tmp --list-keys
/home/frank/.gnupg/tmp
----------------
pub rsa1024/320752EA 2017-08-30 [SCEA]
添加用户id
最后一步包括编辑此键以添加用户id
frank@7777a258a48e:~/sub2primary$ gpg2 --no-default-keyring --keyring tmp --secret-keyring sec_tmp --edit-key 320752EA
子命令adduid
将提示输入必要的信息。完成后,保存
。这将添加用户id并自动签名
导出子/主键
最后,您可以导出新的主键,它与旧的子键相同。可以将输出添加到GitLab上的配置文件中
frank@7777a258a48e:~/sub2primary$ gpg2 --no-default-keyring --keyring tmp --secret-keyring sec_tmp --armor --export
您不应将tmp
钥匙圈或此改装钥匙用于任何其他用途!上传密钥后,您可以删除临时文件。使用常用子密钥签名的提交现在将在GitLab上显示为已验证
frank@7777a258a48e:~/sub2primary$ gpg2 --no-default-keyring --keyring tmp --secret-keyring sec_tmp --armor --export
信用证:此解决方案的灵感来源于,它使用类似的工具来解决不同的问题。如此长且高级的说明实际上仍然有效。非常感谢。:)对于获取正确子密钥的步骤,我们可以检查密钥创建时间。对于
vim-b
,这里有一个新手可能需要的有用命令:%!xxd和:%!xxd-r