最近常常會看到別入 GitHub 上的 Commit 會有 Verified 的字樣,查了才知道這是為了防止有人盜用你的 email 簽 commit,畢竟 git 的 user.email 是可以自己隨便設的,所以 GitHub 就提供一個可以用公私鑰的方式來確認身份。
GnuPG
我們要利用 GnuPG 來產生金鑰和簽署 Commit,當然要先安裝他,可以自己查一下自己的 OS 要怎麼裝:
brew install gnupg # macOS
choco install gnupg # Windows
apt install gnupg # Ubuntu
產生 GPG Key
用下面的一行指令就會進到互動式的畫面,接下來需要輸入一些資料:
gpg --full-generate-key
- 產生 Rsa and Rsa
- GitHub 建議使用 4096,最複雜的就對了
- 金鑰要不要過期可以自己評估,我是選不過期
- 確認資料輸入正確
- 輸入要簽署的名字
- 輸入要簽署的 email,注意必須與 GitHub Email 和
git config user.email
的一樣。 - 註釋隨便輸入即可
- 確認資料輸入正確
接下來會跳出一個要輸入密碼的畫面,一樣依自己需求設定即可
這樣就產生成功了,可以記一下這個畫面出現的資料
如果要顯示所有的 Key:
gpg --list-secret-keys
複製 GPG Key 到 GitHub
用各個指令來顯示公鑰,並且複製到 GitHub 上,包含 Begin 和 End 兩行:
gpg --armor --export <Your Key>
進到設定裡,新增 GPG Key,貼上剛剛複製下的金鑰
簽署 Commit
要簽署 Commit 我們需要先告訴 git 我們要用哪支鑰匙,也是用 git config 設定,如果要每個倉庫都用這支鑰匙,可以直接設定 global:
git config user.signingkey <Your Key>
git config --global user.signingkey <Your Key>
設定好後,我們就可以開始簽 Commit,基本上就是在 Commit 時加上 -S
:
git commit -S -m "Commit Message"
如果覺得每次都要加上參數很麻煩,也可以直接加到 config 中,讓每次 Commit 都預設簽署:
git config commit.gpgsign true
git config --global commit.gpgsign true
接下來,只要 push 到 GitHub 上,就會看到有 Verified 的標籤: