Alright, got GPG signing on my GitHub commits!
— Kenneth Reitz ? (@kennethreitz) 2017年11月25日
其實 GitHub 老早就開始支援 GPG,不過因為不是必要條件,所以一直沒在意,最近看到有大神在講這件事,想說不然也來設定看看好了。
macOS 上是推薦用 GPG Suite,不過我看它在 High Sierra 上有一部份還是 beta 版,所以還是選擇手動設定 gpg-agent。
用 Homebrew 安裝軟體,其中 pinentry 是比較美觀一些的 Passphrase 輸入介面,而且可以和 mac 自己的 key chain 整合。
brew install gpg gpg-agent pinentry-mac
輸入一些資料後產生 key
gpg --gen-key
在 ~/.gnupg/gpg-agent.conf
加入
pinentry-program /usr/local/bin/pinentry-mac
Reload gpg-agent 後設定才會生效
gpg-connect-agent reloadagent /bye
可以用下面的指令測試是不是能正常簽章
echo "test" | gpg --clearsign
第一次執行時,理論上會出現 Passphress 的輸入介面
正常在輸入完 passphrase 後應該出現成功簽章的資料
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 test -----BEGIN PGP SIGNATURE----- iQEzBAEBCAAdFiEE6COevNitSzO1COM02saydp0usqsFAloeOQAACgkQ2saydp0u sqseGgf/cESWSC42/ipQk8TfBAsuFpZ2ANf5PY+Uz2z54eb5wcPNq37uZXnXOq9P vDdP4j7uMp4QOO4NcDwPG+Cqv5mJdch3TJ/KEg1iLUlBaZKp3I7U8qU5eSVI/N55 SofTVGX9Gbl69ZMKuP/a83+UFB4cwKDD4fBmnwiJV1LynK+PC29kqgxnpdQziP2/ A1YCd8DwC0L5+W1obsKxxeJlJSh7Lv0seIPhNI8MJ5+fVMtFV4DbyHxmX5u1iW88 7QEzpQJ9FUXcAGC6v67BaCIHp4mAgM0VbLItSP7eOVBmlm26daSBq+BMoYricYS8 zPPZuIC1p9M6XSE2OEoObZNlFUqIAw== =Ah/L -----END PGP SIGNATURE-----
本機端 git 的設定
找出剛剛建好的 key id
gpg --list-secret-keys
如果覺得 id 太長不好看,也可以加上下列兩種 parameter:
--keyid-format SHORT --keyid-format LONG
指定 git commit 簽章要用的 key,還有開啟預設使用 GPG 簽章功能。
git config --global user.signingkey KEY_ID git config --global commit.gpgsign true
如果是在同一次 gpg-agent 運作的期間,之後不用在輸入 passphrase;如果在 Pinentry Mac 裡有勾選 “save in keychain”,之後也不會再問,會存在 Keychain Access.app 裡 GnuPG 這個應用程式密碼裡。
GitHub 的設定
找出剛剛建好的 key id
gpg --list-secret-keys --keyid-format LONG
匯出 public key
gpg --armor --export KEY_ID
把 public key 加到 GitHub 的 Settings > SSH and GPG keys 裡,這樣 push 上去的 commit 就會有 “Verified” 的字樣了。
Windows 上的設定
安裝 Gpg4win,用裡面提供的 Kleopatra 新增 key、匯出 public key,之後也是到 GitHub 上新增。
不知道 VS code 是不是自帶了 gpg 的程式或是有其他 PATH 相關的問題,git 要多設定 gpg.program
的路徑,不然會有找不到 key 的問題:
git config --global gpg.program 'C:/Program Files (x86)/GnuPG/bin/gpg.exe'
GitHub 自己的說明文件在:Signing commits with GPG