GPG 全名為 GNU Privacy Guard 也可以簡稱為 GnuPG,這篇文章教你如何創建 GPG Key 並且設定簽署,可以確保 git commit 一定是本人!

創建 GPG Key

首先先下載適用於您作業系統的 GPG 工具 (點我前往下載頁),我是使用 Windows,所以下載 Gpg4win。

安裝過程全部預設就好!

安裝好後打開指令視窗,開始創建 GPG key。

GPG 有多個版本,不同版本指令不一樣:

  • 2.1.17 或更高版本請輸入 gpg --full-generate-key
  • 低於 2.1.17 版本請輸入 gpg --default-new-key-algo rsa4096 --gen-key

首先會問你要使用的金鑰種類,這裡預設就好。

Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
  (14) Existing key from card
Your selection? 1

接著會問你想要用多大的金鑰尺寸,這裡打 4096

RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (3072) 4096
Requested keysize is 4096 bits

然後指定這把金鑰的有效期限,如果沒特殊需求可以輸入 0,代表永不過期

Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Key is valid for? (0) 0
Key does not expire at all

接著確認設定是否有問題,沒問題輸入 y

Is this correct? (y/N) y

確認完後會要你輸入基本資料和安全密碼。

GnuPG needs to construct a user ID to identify your key.

Real name: your name
Email address: youremail@your.email
Comment:
You selected this USER-ID:
    "your name <youremail@your.email>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O

創建完畢後輸入 gpg --list-secret-keys --keyid-format LONG 列出同時具有公鑰和私鑰的 GPG key。

注意: Linux 上的某些 GPG 安裝可能會要求使用 gpg2 --list-keys --keyid-format LONG 來查看現有 Key 列表。

如果是這樣,還需要設定 Git,輸入 git config --global gpg.program gpg2

在列表中複製要使用的 GPG key ID,例如下方範例 GPG key ID 為 3AA5C34371567BD2

------------------------------------
sec   4096R/3AA5C34371567BD2 2016-03-10 [expires: 2017-03-10]
uid                          Hubot 
ssb   4096R/42B317FD4BA89E7A 2016-03-10

接著輸入 gpg --armor --export [你的 GPG key ID]

它會輸出公鑰,複製貼到你的 Github / Gitlab / Bitbucket 等平台的 GPG Key 設定,從開頭 -----BEGIN PGP PUBLIC KEY BLOCK----- 複製到結尾 ----END PGP PUBLIC KEY BLOCK-----

提交包含簽署的 Commit

接著是設定提交包含簽署的 Commit。

執行 git config --global user.signingkey [你的 GPG key ID] 設定 git。

  • 如果你只想設定此專案改輸入 git config user.signingkey [你的 GPG key ID]

接下來在每次 Commit 時加上 -S 就可以簽署了。

也可以輸入指令 git config --global commit.gpgsign true 設定,這樣就不用每次都加 -S

  • 如果你只想設定此專案改輸入 git config commit.gpgsign true

Push 上去後可以去檢查看看是否成功,GitHub 會在 Commit 紀錄中標示 Verified

錯誤排除補充

如果您是使用 Windows,遇到以下錯誤訊息:

gpg: signing failed: No secret key
error: gpg failed to sign the data
fatal: failed to write commit object

輸入指令 git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe" 就可以排除了。 (路徑要注意,這是預設路徑,如果你安裝 GPG 時有改路徑,這邊記得修改)

張文相 Wenxiang Zhang 的頭像

張文相 Wenxiang Zhang

我是本站的站長,是一位 Web 工程師,喜歡 Coding XDD

利用 GPG 簽署 git commit,確保提交者身分非他人仿冒! - QR Code

本站內容未經授權許可請勿擅自抄襲
如果需引用部分內容請註明來源網址

發表時間:2020/11/14 18:10:25

此頁面網址:https://blog.reh.tw/archives/2296

您可能會喜歡的文章

Facebook 留言