1. 程式人生 > 其它 >使用keybase給你的Github commit加上GPG Verified簽名認證(keybase教程)

使用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 。

  1. keybase.io 使用郵箱註冊

  2. 之後建立一個 pgp key

  3. 生成一個 key

  4. 填入你的 id 與 email 用於生成 key

  5. 之後經過隨機生成過程就可以得到你的 public key,這裡的選項是在每個使用私鑰的場景第一次是否需要輸入 keybase 密碼驗證,我是勾選的,如果平時網路環境比較差可以不勾選,因為 keybase 的伺服器在國外

注意:

  1. 存放在本地不安全,那託管到 keybase 雲上也不安全,只能說仁者見仁智者見智,因為 keybase 現在也有超過 10w 人在使用了,他的便捷性和統一性是無可比擬的

  2. 因為你把 key 託管到了雲上,所以距離你的 key 只有 keybase 的密碼一道防線,建議使用隨機密碼註冊 keybase

  3. 第二步中為什麼是 pgp key 而不是 gpg ,想了解具體 gpg 相關資訊的可以閱讀:

    《阮一峰:GPG入門教程》

至此為止,我們的 gpg key 已經生成且託管完畢,妥善儲存 keybase 的登陸密碼,就可以隨處隨地使用 gpg key 。

同步本地 GPG KEY

匯入公鑰

按照 keybase 給出的命令,在本地 git bash 使用命令匯入 PUBLIC KEY:

他的結構如下:

	# 匯入公鑰的命令
	curl https://keybase.io/你的註冊id/pgp_keys.asc | gpg --import

注:

  1. 此命令可提供給其他人匯入你的公鑰以驗證你的簽名

  2. 如果報錯找不到 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"

注:

  1. 檔案路徑需要用左斜槓,比如 C:/Users/name ,不可以使用 C:\Users\name

  2. 檔案路徑需要使用雙引號包裹

匯入之後檢視本地私鑰:

	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 全域性配置上:

《 Github:將您的簽名金鑰告知 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

其他

這裡再注意幾個點:

  1. 如果你有多個 gpg ,提交可能要做 commit 使用哪個 key 的區分

  2. 你可以限制使用你的郵箱的 Github commit 必須進行 gpg 驗證

詳情參照 Github 官方教程:

《 Github:管理提交簽名驗證》

如果你想了解 GPG 的更多,可參見:

《 阮一峰:GPG 入門教程 》

總結

除了 github commit 的認證,gpg 還可以對檔案加解密或者簽名,驗證你本人的身份,證明你就是你!