Cara Setting 'Verified' (Sign) Git Commit Dengan SSH atau GPG Signature (Linux)

Langkah-langkah dan cara menambahkan 'Verified' commit message pada GitHub menggunakan SSH Signing Key atau GPG Signing Key.

Cara menambahkan “Verified” commit message pada GitHub menggunakan SSH Signing Key atau GPG Signing Key.


Jika Anda sering berkunjung ke halaman commit history dari sebuah GitHub repositori, Anda mungkin menemukan ada beberapa commit message yang memiliki label “Verified” berwarna hijau, tidak berlabel, atau bahkan berlabel “Unverified” dengan label berwarna orange.

Fitur pada GitHub tersebut menandakan bahwa commit atau tag tersebut berasal dari sumber yang otentik dan telah terverifikasi oleh GitHub. Hal ini penting supaya pengguna lain yang menggunakan repositori tersebut yakin bahwa perubahan yang dilakukan pada repositori tersebut memang benar dari sumber yang sudah terverifikasi.

Sampai artikel ini dibuat, ada 3 cara untuk menandatangani atau signing pesan commit tersebut, yaitu dengan menggunakan GPG signature, SSH signature, dan S/MIME signature. Dari ketiga metode yang ada, saya ingin berbagi pengalaman saya menggunakan GPG dan SSH signature untuk melakukan signing.

Untuk mengikuti langkah-langkah di artikel ini, pastikan Anda sudah dapat menggunakan aktifitas seperti commit dari komputer Anda tanpa ada masalah. Jika Anda belum pernah mensetting Git, ikuti artikel saya sebelumnya yang berjudul Cara Menggunakan Git Melalui Protokol SSH Untuk Akun GitHub.

Menggunakan SSH Key Signature

Cara paling mudah adalah menggunakan metode SSH signature. Anda dapat menggunakan SSH key yang sudah Anda gunakan untuk Authentication key dan mengupload public key yang sama untuk digunakan sebagai Signing key.

Catatan: Untuk menggunakan metode SSH Key Signature, Anda perlu menggunakan Git 2.34 keatas.

Menambahkan SSH Key Sebagai Signing Key

Untuk menambahkan SSH key sebagai Signing key di akun GitHub Anda:

  1. Masuk ke “Settings” > “SSH and GPG keys” > Klik tombol “New SSH key”.
  2. Isi “Title” dengan apapun yang mudah Anda ingat untuk mengidentifikasi SSH key Anda.
  3. Pada bagian “Key type”, pilih “Signing Key”.
  4. Terakhir kembali ke terminal dan paste isi dari SSH public key ke textarea “Key”. Setelah itu klik tombol Add SSH key".

Mengubah Konfigurasi Git di Komputer Anda

Setelah SSH Signing key ditambahkan ke Akun GitHub, Anda perlu merubah konfigurasi git gpg.format ke ssh dengan cara menjalankan perintah berikut:

1git config --global gpg.format ssh

Terakhir update config user.signingkey dan masukkan lokasi dimana SSH PUBLIC KEY yang sudah Anda upload.

1git config --global user.signingkey ~/.ssh/github_key.pub

Catatan: Ubah ~/.ssh/github_key.pub dengan lokasi sebenarnya PUBLIC KEY Anda disimpan.

Menggunakan GPG Key Signature

Selain menggunakan SSH Key Signature, Anda bisa menggunakan GPG Key Signature untuk melakukan signing commit.

Membuat GPG Key

Jika Anda belum memiliki GPG key pair, Anda dapat membuatnya dengan menjalankan perintah berikut:

1gpg --full-generate-key

Setelah menjalankan perintah diatas, Anda akan diminta untuk melengkapi informasi, diantaranya:

  1. Jenis: Pilih apa saja, Saya rekomendasikan untuk menggunakan default saja, yaitu RSA and RSA.
  2. Key size: Isi antara 1024 hingga 4096. Default 3072. Saya rekomendasikan untuk menggunakan 4096.
  3. Seberapa lama GPG key tersebut valid: Saya rekomendasikan untuk menggunakan default (0, tidak ada tanggal expire).
  4. Masukkan informasi Nama, email, dan komentar. Perhatikan pada saat mengisi informasi email, pastikan email yang Anda masukan sama dengan email yang Anda gunakan di GitHub (dan sudah melakukan verifikasi).
  5. Masukkan passpharse GPG key Anda.

Contoh output dari perintah gpg --full-generate-key:

 1gpg (GnuPG) 2.2.41; Copyright (C) 2022 g10 Code GmbH
 2This is free software: you are free to change and redistribute it.
 3There is NO WARRANTY, to the extent permitted by law.
 4
 5Please select what kind of key you want:
 6   (1) RSA and RSA (default)
 7   (2) DSA and Elgamal
 8   (3) DSA (sign only)
 9   (4) RSA (sign only)
10  (14) Existing key from card
11Your selection? 1
12RSA keys may be between 1024 and 4096 bits long.
13What keysize do you want? (3072) 4096
14Requested keysize is 4096 bits
15Please specify how long the key should be valid.
16         0 = key does not expire
17      <n>  = key expires in n days
18      <n>w = key expires in n weeks
19      <n>m = key expires in n months
20      <n>y = key expires in n years
21Key is valid for? (0) 0
22Key does not expire at all
23Is this correct? (y/N) y
24
25GnuPG needs to construct a user ID to identify your key.
26
27Real name: Jasmerah1966
28Email address: [email protected]
29Comment: GPG sign key untuk GitHub
30You selected this USER-ID:
31    "Jasmerah1966 (GPG sign key untuk GitHub) <[email protected]>"
32
33Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
34We need to generate a lot of random bytes. It is a good idea to perform
35some other action (type on the keyboard, move the mouse, utilize the
36disks) during the prime generation; this gives the random number
37generator a better chance to gain enough entropy.
38We need to generate a lot of random bytes. It is a good idea to perform
39some other action (type on the keyboard, move the mouse, utilize the
40disks) during the prime generation; this gives the random number
41generator a better chance to gain enough entropy.
42gpg: revocation certificate stored as '/home/jasmerah1966/.gnupg/openpgp-revocs.d/F5FEE1EF836C62F5361A643B156C485C2EB2C1D6.rev'
43public and secret key created and signed.
44
45pub   rsa4096 2023-10-23 [SC]
46      F5FEE1EF836C62F5361A643B156C485C2EB2C1D6
47uid                      Jasmerah1966 (GPG sign key untuk GitHub) <[email protected]>
48sub   rsa4096 2023-10-23 [E]

Mendapatkan Informasi GPG Key Anda

Untuk melihat list GPG key Anda (memiliki secret key), Anda dapat menjalankan perintah berikut:

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

Contoh output dari perintah diatas:

1/home/jasmerah1966/.gnupg/pubring.kbx
2-------------------------------------
3sec   rsa4096/156C485C2EB2C1D6 2023-10-23 [SC]
4      F5FEE1EF836C62F5361A643B156C485C2EB2C1D6
5uid                 [ultimate] Jasmerah1966 (GPG sign key untuk GitHub) <[email protected]>
6ssb   rsa4096/04951FB42332019F 2023-10-23 [E]

Kemudian jalankan perintah berikut untuk mendapatkan GPG key dalam format ASCII armor:

1gpg --armor --export 156C485C2EB2C1D6

Catatan: Ubah key ID milik saya diatas (156C485C2EB2C1D6) dengan key ID milik Anda.

Copy GPG key Anda (diawali dari -----BEGIN PGP PUBLIC KEY BLOCK----- sampai -----END PGP PUBLIC KEY BLOCK-----) yang setelah ini perlu Anda tambahkan ke akun GitHub Anda.

Menambahkan GPG Ke Akun GitHub Anda

  1. Masuk ke “Settings” > “SSH and GPG keys” > Klik tombol “New GPG key”.
  2. Isi “Title” dengan apapun yang mudah Anda ingat untuk mengidentifikasi GPG key Anda.
  3. Masukkan GPG key Anda ke textarea “Key”. Setelah itu klik tombol Add GPG key".

Melakukan Signing Commit

Jika sudah disetting dengan benar, Anda bisa melakukan commit dengan perintah git commit -S atau git commit -S -m 'Pesan commit kamu'

Untuk signing dengan S/MIME saya belum pernah memiliki kesempatan untuk mencoba. Mungkin jika ada yang ingin menambahkan silahkan ditambahkan dengan melakukan pull request.

Semoga membantu.