🔧 阿川の電商水電行
Shopify 顧問、維護與客製化
💡
小任務 / 單次支援方案
單次處理 Shopify 修正/微調
⭐️
維護方案
每月 Shopify 技術支援 + 小修改 + 諮詢
🚀
專案建置
Shopify 功能導入、培訓 + 分階段交付

我從 2020 年開始就一直在為我的 Git 提交簽名,這似乎是一項可選的安全措施,直到你意識到有人冒充你是多麼容易。 GitHub 提交簽名使用GPG(GNU 隱私衛士)以加密方式證明你(且只有你)進行了提交。

任何人都可以設定他們的 git 配置,使用你的名字和郵箱,推送提交,這些提交就會顯示在 GitHub 上,就像你寫的一樣。真的。唯一的差別是什麼?沒有「已驗證」徽章。

GitHib 上未經驗證的提交

什麼是 GPG?

GPG(GNU Privacy Guard)是 OpenPGP 標準的開源實現,用於加密和簽署資料。它通常用於加密電子郵件和文件,但也非常適合用於簽署 Git 提交。使用 GPG 簽名提交時,您將建立一個加密簽名,以證明提交來自有權存取您私鑰的人,而不僅僅是知道您的姓名和電子郵件地址的人。

如果您想深入了解 OpenPGP 標準,請查看官方 OpenPGP 規範

為什麼要簽署您的承諾?

現實世界中的模仿範例

提交模擬並非只是理論上的。以下是一些實際應用場景:

  • 開源貢獻:有人可能使用核心維護者的身分提交惡意提交,使其看起來像是受信任的程式碼

  • 工作環境:具有儲存庫存取權限的攻擊者可能會以您的身分提交程式碼,這可能會讓您因錯誤或安全問題而受到指責

  • 審計線索:在受監管的行業中,能夠以加密方式證明誰提交了哪些程式碼對於合規性至關重要

  • 供應鏈攻擊:攻擊者冒充開發人員,將惡意程式碼注入廣泛使用的程式庫中,影響數千個下游專案

「已驗證」徽章不僅僅是裝飾性的。它證明提交確實來自金鑰持有者,而不是某個冒充者。

我的已驗證提交

有人真的關心嗎?

說實話?大多數開發人員不會在每次提交時檢查驗證徽章。

係統會關心。組織可以透過分支保護規則要求提交簽名。受監管的行業需要它們來確保合規。安全工具會標記沒有簽署的儲存庫。當供應鏈攻擊發生時,簽署的提交是證明其合法性的唯一方法。

這就像 10 年前的 HTTPS 一樣。它一直是可選的,直到它不再是可選的。

你不是在為今天做準備,而是在為重要時刻做準備。

本指南適用於 macOS

本教學主要在 macOS 上使用 GPG Keychain (GPG Suite的一部分),它提供了一個美觀的 GUI 用於金鑰管理。如果您使用的是 Linux 或 Windows,概念相同,但需要使用不同的工具:

所有平台上的 git 設定步驟相同。假設您擁有 GitHub 帳戶,大約需要 15 分鐘。

步驟1:安裝GPG工具

前往gpgtools.org下載 GPG Suite。它包含 GPG Keychain,它為你提供了一個視覺化的介面來管理金鑰,而無需你費力地使用命令列工具。

像安裝其他 Mac 應用程式一樣安裝它。

步驟 2:產生您的 GPG 金鑰

開啟 GPG Keychain,點擊「新建」即可建立金鑰對。

新的密鑰對對話框

填寫:

  • 姓名:您的真實姓名(應與您的 GitHub 帳戶一致)

  • 電子郵件:與您的 GitHub 帳戶關聯的電子郵件

  • 密碼:選擇一個強密碼。每次簽署提交時都需要它。

重要設定

  • 我將密鑰設定為 1 年後過期。這是一個很好的安全措施。如果你的金鑰被盜用,它最終會變得毫無用處。你可以在密鑰到期時隨時延長有效期限。

  • 確保金鑰類型為 RSA 且至少為 4096 位元以確保良好的安全性。

點擊“生成密鑰”並等待幾秒鐘。

我的 GPG 金鑰

⚠️ 備份你的私鑰

密碼短語可以保護您的私鑰,但它並非備份。如果您遺失了私鑰檔案本身(例如在電腦當機或重裝時),即使知道密碼短語也無濟於事。沒有私鑰文件,即使您記得密碼短語,也無法簽署新的提交。

>

良好的備份選項:

  • 匯出你的私鑰( gpg --export-secret-keys --armor YOUR_KEY_ID > private-key.asc )並將其作為安全筆記儲存在密碼管理器(例如 1Password 或 Bitwarden)中。請注意,你很可能會收到密碼提示。

匯出私鑰

  • 將整個~/.gnupg目錄備份到加密雲端存儲

  • 將加密副本保存在安全的外部磁碟機上

>

無論您選擇哪種方法,請確保它是加密的並且只有您可以存取。

步驟 3:匯出您的公鑰

在 GPG 鑰匙圈中,選擇您的新金鑰,然後從選單中轉到匯出(或右鍵單擊該金鑰)。

確保選取“在匯出的檔案中包含密鑰”並將其保存在某處。

匯出密鑰對話框

在文字編輯器中開啟該文件。它看起來應該像這樣:

-----BEGIN PGP PUBLIC KEY BLOCK-----

[bunch of random-looking characters]

-----END PGP PUBLIC KEY BLOCK-----

複製整個區塊。

步驟 4:將您的公鑰新增至 GitHub

  1. 前往 GitHub → 設定 → SSH 和 GPG 金鑰

  2. 點選“新建 GPG 金鑰”

  3. 貼上你的公鑰

  4. 點擊“新增 GPG 金鑰”

GitHub 新增 GPG 金鑰螢幕

GitHub 現在知道您的公鑰並可以驗證使用您的私鑰簽署的提交。

步驟 5:設定 Git 簽署提交

打開終端機並執行以下命令:

首先,取得您的金鑰 ID:

gpg --list-secret-keys --keyid-format=long

您將看到如下輸出:

sec   rsa4096/ABC123DEF456 2022-01-15 [SC] [expires: 2026-01-15]

ABC123DEF456部分是您的密鑰 ID。

現在配置 git:

# Tell git which key to use (replace with your actual key ID)
git config --global user.signingkey ABC123DEF456

# Tell git to sign all commits by default
git config --global commit.gpgsign true

# Tell git where GPG is located (for macOS)
git config --global gpg.program /usr/local/bin/gpg

如果您想驗證您的配置:

git config --global --list | grep gpg
git config --global --list | grep signingkey

您應該看到:

commit.gpgsign=true
user.signingkey=ABC123DEF456
gpg.program=/usr/local/bin/gpg

步驟6:測試

建立測試提交:

git commit --allow-empty -m "Testing GPG signing"
git log --show-signature -1

你應該在輸出中看到“Good signature”。如果你將它推送到 GitHub,你會在你的提交旁邊看到一個可愛的「Verified」標記。

注意:首次使用 GPG 金鑰提交時,系統會要求您輸入密碼並將其新增至 Apple 鑰匙圈。這很正常,這可以避免每次都提示您輸入密碼。

更新您的金鑰(到期時)

當您的金鑰即將到期時,GPG Keychain 可以輕鬆進行續訂:

  1. 打開 GPG 鑰匙串

  2. 選擇您的金鑰

  3. 雙擊打開關鍵詳細訊息

  4. 點擊到期日旁邊的更改...按鈕

gpg 鑰匙圈中的金鑰對話框

  1. 選擇新的到期日(我通常會延長一年)

更改 GPG 金鑰的到期日期

  1. 輸入您的密碼進行確認

您無需在 GitHub 上更新任何內容。金鑰 ID 保持不變,因此 git 和 GitHub 可以繼續工作而無需進行任何更改。

故障排除

“gpg 未能簽署資料”

這通常意味著:

  1. GPG 找不到您的金鑰:使用gpg --list-secret-keys仔細檢查您的金鑰 ID

  2. 密碼問題:您的密碼提示可能被隱藏了。請嘗試執行echo "test" | gpg --clearsign來觸發它。

  3. 錯誤的 GPG 路徑:確保git config --global gpg.program指向正確的位置

在 macOS 上,如果您透過 GPG 工具安裝,路徑應該是/usr/local/bin/gpg

“沒有秘密鑰匙”

這意味著 git 正在尋找一個不存在的鍵。執行:

gpg --list-secret-keys

確保 git 配置中的金鑰 ID 與列出的金鑰之一相符。

GitHub 上的提交仍然顯示為未經驗證

檢查:

  1. 你的 git 配置中的電子郵件與你的 GPG 金鑰上的電子郵件相符

  2. 該電子郵件已在您的 GitHub 帳戶中驗證

  3. 您已將公鑰上傳至 GitHub

總結

設定大約需要 15 分鐘,但一旦配置完成,您就無需再費心了。您的每次提交都會自動簽名,並且您將獲得驗證徽章,證明這確實是您的程式碼。

如果你在開源專案上工作,或者在程式碼來源至關重要的環境中工作,簽名提交就不是可選的,而是必須的。不妨趁現在還在考慮的時候就設定一下。

如果您發現這有幫助或遇到任何問題,請在評論中告訴我!

如果您想保持聯繫,我的所有社交活動都在nickyt.online

直到下一個!

照片由FlyDUnsplash上拍攝


原文出處:https://dev.to/nickytonline/anyone-can-commit-code-as-you-on-github-heres-how-to-stop-them-2in7


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝28   💬4   ❤️7
836
🥈
我愛JS
📝2   💬8   ❤️2
112
🥉
御魂
💬1  
4
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
🔧 阿川の電商水電行
Shopify 顧問、維護與客製化
💡
小任務 / 單次支援方案
單次處理 Shopify 修正/微調
⭐️
維護方案
每月 Shopify 技術支援 + 小修改 + 諮詢
🚀
專案建置
Shopify 功能導入、培訓 + 分階段交付