使用keybase給你的Github commit加上GPG Verified簽名認證(keybase教程)
技術標籤:Githubgithub安全gpgkeybasepgp
前言
你的專案 git commit 都是你本人提交的嗎?
如何證明我就是我?
在 github 使用 GPG 祕鑰加上 Verified
驗證你就是你自己!
建立 GPG KEY
初始化 gpg
只要安裝了 git ,在 git bash 內預設可以使用 gpg 功能:
我們假定你從來沒有生成過 gpg 祕鑰,右鍵開啟 git bash ,先初始化一下 gpg 功能:
gpg --list-secret-keys --keyid-format LONG
建立 gpg key
本地生成 gpg key 的方法有很多,存在本地是不安全的,因為很容易丟失,所以我們選擇 keybase 託管 gpg 。
-
在 keybase.io 使用郵箱註冊
-
之後建立一個 pgp key
-
生成一個 key
-
填入你的 id 與 email 用於生成 key
-
之後經過隨機生成過程就可以得到你的 public key,這裡的選項是在每個使用私鑰的場景第一次是否需要輸入 keybase 密碼驗證,我是勾選的,如果平時網路環境比較差可以不勾選,因為 keybase 的伺服器在國外
注意:
-
存放在本地不安全,那託管到 keybase 雲上也不安全,只能說仁者見仁智者見智,因為 keybase 現在也有超過 10w 人在使用了,他的便捷性和統一性是無可比擬的
-
因為你把 key 託管到了雲上,所以距離你的 key 只有 keybase 的密碼一道防線,建議使用隨機密碼註冊 keybase
-
第二步中為什麼是 pgp key 而不是 gpg ,想了解具體 gpg 相關資訊的可以閱讀:
至此為止,我們的 gpg key 已經生成且託管完畢,妥善儲存 keybase 的登陸密碼,就可以隨處隨地使用 gpg key 。
同步本地 GPG KEY
匯入公鑰
按照 keybase 給出的命令,在本地 git bash 使用命令匯入 PUBLIC KEY:
他的結構如下:
# 匯入公鑰的命令
curl https://keybase.io/你的註冊id/pgp_keys.asc | gpg --import
注:
-
此命令可提供給其他人匯入你的公鑰以驗證你的簽名
-
如果報錯找不到 gpg 說明你不在 git bash 內,請使用 git bash 命令列
檢視本地公鑰:
gpg --list-keys
這裡的含義如下:
-
pub
:公鑰 -
sub
:子公鑰 -
[SC]
:PM 級主鑰,用作認證 ( cert ) -
[E]
:E 級副鑰,用作加解密 ( encrypt ) -
[SA]
:SA 級副鑰,用作簽署 ( sign ) 和認證 ( auth )
匯入私鑰
在 keybase 匯出你的私鑰:
之後得到私鑰內容:
複製下面的內容到本地儲存為一個檔案,我這裡放到了桌面位置為 C:/Users/name/Desktop/miyao
:
-----BEGIN PGP PRIVATE KEY BLOCK-----
Version: Keybase OpenPGP v2.1.13
Comment: https://keybase.io/crypto
......
之後在 git bash 命令列匯入該私鑰檔案:
gpg --import "C:/Users/name/Desktop/miyao"
注:
-
檔案路徑需要用左斜槓,比如
C:/Users/name
,不可以使用C:\Users\name
-
檔案路徑需要使用雙引號包裹
匯入之後檢視本地私鑰:
gpg --list-secret-keys --keyid-format LONG
這裡的含義如下:
-
sec
:主私鑰 -
ssb
:副私鑰
到此為止我們本地已經有了公鑰和私鑰,已經具備了驗證,簽字的環境,如果更換任何一臺電腦,都可以如此載入此 key 。
打通 Github GPG 認證
下面我們配置 github 與本地 git ,使得每次 commit 都可以被簽名,從而得到 Verified 。
配置 github gpg key
參考 Github 官方教程,將 keybase 中的 PUBLIC KEY 複製到 github settings 的 GPG 設定處:
《 Github: 新增 GPG 金鑰到 GitHub 帳戶 》
注:剛剛我們儲存到本地的是私鑰,不是公鑰,公鑰直接在 keybase 點開復制就可以了,也不需要輸入密碼,是公開的。
現在 github 已經可以使用公鑰驗證我們帶有簽名的 commit 提交。
本地開啟 commit 攜帶簽名
參照 Github 官方教程,將主私鑰的 hash 串給本地 git 全域性配置上:
示例:
# 查詢本地私鑰
$ gpg --list-secret-keys --keyid-format LONG
/Users/hubot/.gnupg/secring.gpg
------------------------------------
# 這一行就有主私鑰的 hash 串 ↓
sec 4096R/3AA5C34371567BD2 2016-03-10 [expires: 2017-03-10]
uid Hubot
ssb 4096R/42B317FD4BA89E7A 2016-03-10
# 給 git 全域性配置簽名 key
git config --global user.signingkey 3AA5C34371567BD2
開啟 commit 簽名功能:
git config --global commit.gpgsign true
到此為止,我們以後本地 commit 已經可以攜帶簽名,到了 Github 即可接受公鑰驗證從而 Verified !
其他
這裡再注意幾個點:
-
如果你有多個 gpg ,提交可能要做 commit 使用哪個 key 的區分
-
你可以限制使用你的郵箱的 Github commit 必須進行 gpg 驗證
詳情參照 Github 官方教程:
如果你想了解 GPG 的更多,可參見:
總結
除了 github commit 的認證,gpg 還可以對檔案加解密或者簽名,驗證你本人的身份,證明你就是你!