Github - 如何提交一个带有“verified”标识的commit/如何验证一次commit的签名
Github - 如何提交一个带有“verified”标识的commit/如何验证一次commit的签名
前言(Why)
今天在Github上浏览某项目的commit记录的时候发现,有的commit记录带有verified绿色标识,有的带有橘色的Unverified标识,还有的什么都不显示。
既然我是根正苗红的作者(bushi),为何不想要一个verified标呢?相关探究随之而来。
What
这是Github的“提交签名验证”机制,可以确保改提交未本人所为。
当提交签名在被推送到 GitHub 时经过验证,一个验证记录会与该提交一并存储。 该记录无法编辑且会一直存在,这样一来,即便签名密钥被轮换、撤销,或者参与者离开了组织,签名也能始终保持已验证状态。
验证记录包含一个时间戳,用于标记验证完成的时间。 此持久记录可确保已验证状态的一致性,为存储库内的参与提供稳定的历史记录。 可以通过将鼠标悬停在 GitHub 上的“Verified”徽章上,或者通过REST API访问提交(其中包含一个 verified_at 字段)来查看此时间戳。
How 2 make 1 verify
因为SSH密钥对还可以当Authentication Key,所以这里介绍如何使用SSH密钥对对一次commit签名(其实是因为我暂时不太了解GPG Key)。
假设你已经在默认位置生成过ssh密钥对,则只需在你想提交时签名的仓库执行以下命令(如果你想对所有未进行过相关配置的仓库生效,只需要在git config
后面加一个--global
):
1 |
|
然后将ssh公钥上传到github上。
Github - SSH and GPG keys -> New SSH Key
-> Key type
选择Signing Key
-> 输入SSH公钥并保存。
在本地进行一次commit并push到Github,顺利的话,在Commit历史记录中就能看到Verified标了。
How 2 verify 1 commit
我对一次commit通过ssh密钥进行了签名,那么我如何验证这次签名呢?
首先需要创建一个签名验证文件,例如C:\Users\{username}\.ssh\allowed_signers
。
对于一个ssh公钥(例如C:\Users\{username}\.ssh\id_rsa.pub
),格式是这样的:
1 |
|
也就是加密算法 公钥数据 邮箱
。
我们要调换一下顺序为邮箱 加密算法 公钥数据
并放到allowed_signers
(或其他)新文件中。
只会在git中配置:
1 |
|
然后就能通过commit的hash验证了:
1 |
|
如何对一个commit重新签名
假设你已经配置好了签名方式:
对最新一次提交重新签名:
1 |
|
对历史提交重新签名:
1 |
|
End
但是注意,git版本大于等于2.41才支持上述配置。
原创不易,转载经作者同意后请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/144796175