มา Commit Git ให้ขึ้น Verify เท่ๆกันดีกว่า

Published on
Web Development
2017/12/how-to-show-verify-sign-with-gpg
Discord

หากใครเคยลองอ่าน Commit History ใน Github, Gitlab หรือว่า Bitbucket จะเห็นว่าจะมีคำว่า Verified ต่อท้ายของ Commit เรา ละมันคืออะไร? เอาไว้ทำอะไร? และสามารถทำได้ยังไง?

วันนี้มาแนะนำ วิธีการทำ Verify เท่ๆกันครับ มันคือการ Verify GPG นั่นเอง ข้อดีคือมันถูก Verify จริงๆว่า Commit นั้นมาจากเรานะ วิธีการทำก็ไม่ยาก จริงๆมีเขียนไว้ในแต่ Provider อยู่แล้ว

TLDR

แบบรวบรัด

$ gpg --full-gen-key
$ gpg --list-secret-keys --keyid-format LONG
$ gpg --armor --export GPG_ID_KEY


$ git config --global user.signingkey GPG_KEY
$ git config --global commit.gpgsign true

สำหรับคนต้องการวิธีการทำแบบยาวๆ ก็เริ่มจาก ติดตั้ง และ Generate GPG ID เลย

1. Install & Generate GPG

ทำการดาวน์โหลดและติดตั้ง จาก link นี้ GnuPG

$ gpg --full-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)
Your selection? 1

What keysize do you want? (2048) 4096
Key is valid for? (0) 1y

Real name: Devahoy
Email address: hello@devahoy.com
Comment:
You selected this USER-ID:
    "Devahoy <hello@devahoy.com>"

ทำการเลือก

  1. Your selection? : 1
  2. What keysize do you want? (2048) : 4096
  3. Key is valid for? : 1y (หรือเลือกว่า key จะหมดอายุเมื่อไหร่ ตามต้องการ 0 คือไม่มีหมดอายุ)
  4. Real name: ใส่ชื่อเรา
  5. Email address : ใส่ email

จากนั้นทำการใส่ Passphrase เพื่อตั้งค่ารหัสผ่าน และ GPG จะทำการ generate key ให้เรา

ต่อมาทำการ copy GPG Key ID ด้วยคำสั่ง

$ gpg --list-secret-keys --keyid-format LONG

จะได้รายการ ประมาณด้านล่างนี้ เราจะดูตรงบรรทัด sec rsa4096/ ให้เอาค่า ID หลักจากนี้มา

sec   rsa4096/4D12345678901234 2017-12-31 [SC] [expires: 2019-12-31]
      DE1234CE123B1234567890ABCDEFG1234567890A
uid                 [ultimate] Devahoy <devahoy@gmail.com>
ssb   rsa4096/BC12345678909123 2017-12-31 [E] [expires: 2019-12-31]

ซึ่งจากค่าด้านบน GPG ID คือ 4D12345678901234

ทำการ Export GPG ID ด้วยคำสั่ง

gpg --armor --export 4D12345678901234

เราจะได้ GPG Key หน้าตาประมาณนี้

-----BEGIN PGP PUBLIC KEY BLOCK-----
xxx
xxx
xxx
-----END PGP PUBLIC KEY BLOCK-----

2. Add GPG to Github, Bicbucket or Gitlab

Step ต่อมา หลักจากที่เราได้ GPG แล้ว ก็ให้ทำการเพิ่มไปที่ Service Provider ต่างๆ อย่างเช่น Github ก็เข้าไปที่

My Accounts => Settings ตรงแท้ป Personal settings เลือกที่ SSH and GPG keys

GPG 1

จากนั้นทำการเพิ่ม GPG Key โดย ก็อปปี้ไอ้ก้อน GPG ที่เรา export มาตอนแรก มาใส่

3. Commit with Verified

ต่อมา เราต้อง config git ให้รู้ว่า GPG ที่เราจะใช้คืออะไรด้วยคำสั่ง

git config --global user.signingkey GPG_KEY

สำหรับการ commit แล้วให้ทุกๆการ commit มีการ sign GPG อัตโนมัติ ทำได้แบบ global คือคำสั่ง (คือบอกว่าทุกๆ commit จะใช้ GPG นะ แล้วพอใช้ GPG มันก็จะไปหา signingkey ที่เรา config ไว้นั่นเอง)

$ git config commit.gpgsign true

หรือการ Commit ก็ใช้คำสั่ง

$ git commit -S -m your commit message

Note: เงื่อนไขการ sign คือ Email ของ Github กับ email ที่เราทำการ generate GPG ต้องเป็นเมล์เดียวกัน (Gitlab และ Bitbucket ก็เช่นกัน)

หรือหากใครใช้ Sourcetree สามารถไปกำหนด ได้ที่ Repository Settings แล้วเลือกไปที่ Security ทำการ Enable GPG key signing for commits มันซะ เลือก key ที่เรา generate เป็นอันเรียบร้อย

คราวนี้เราก็จะมี Verified เท่ๆ แล้ว (ไม่รู้มันเท่จริงเปล่านะ ฮ่าๆ)

GPG 2
GPG 3

References

Buy Me A Coffee
Authors
Discord