Mengkonfigurasi GPG & OpenSSH untuk Git di OpenBSD

GnuPG (The GNU Privacy Guard) merupakan salah satu standar yang mengimplementasikan OpenPGP yang didefinisikan oleh rfc4880. Tujuan dari GnuPG untuk mengenkripsikan dan menandai data dan komunikasi, sekaligus memanagemen kunci sistem. GnuPG juga dikenal sebagai GPG yang merujuk gpg sebagai perkakas CLI yang memudahkan integrasi dengan aplikasi lainnya serta mendukung Secure Socket Shell (SSH).

Sejak 1997 GnuPG merupakan salah satu perangkat lunak bebas yang mana peduli dengan data privasi pengguna. GnuPG dapat digunakan secara bebas, dimodifikasi dan didistribusikan di bawah lisensi GPL.

Manfaat menggunakan kunci GnuPG

Jika menggunakan Kunci GnuPG maka pengguna akan mendapatkan tiga hal berikut ini.

  • Integritas data: Kunci GnuPG memastikan integritas konten digital dengan membuat tanda tangan digital. Hal ini memungkinkan pengguna untuk memverifikasi bahwa konten tersebut tidak dirusak selama transit atau proses pengiriman.
  • Otentikasi: Kunci GnuPG menyediakan mekanisme untuk mengautentikasi sumber konten digital. Pengguna dapat memverifikasi bahwa konten tersebut berasal dari entitas yang tepercaya dan terverifikasi.
  • Komunikasi yang aman: Kunci GnuPG memfasilitasi komunikasi aman dengan mengaktifkan enkripsi. Hal ini memastikan bahwa hanya pihak yang berwenang yang dapat mengakses data terenkripsi.

Selain itu, manfaatnya GnuPG ini sangat berguna jika bekerja dengan Git. Untuk penerapannya, pengguna akan memasukkan sandi ke dialog pinentry atau cli yang bertujuan memberikan otentikasi yang asli. Maka nama pengguna akan tampil disetiap commit dengan perintah ini akan memperlihatkan validasi tanda tangan digital di setiap memberikan penanda dengan --gpg-sign.

git commit --gpg-sign -m "menandai dengan kunci gpg"
# atau
git commit -S -m "menandai dengan kunci gpg"

Setelah berhasil, pengguna dapat melihat tanda tangan digital disetiap commit dengan parameter --show-signature.

git show 1af04a6001 --show-signature
         # ^ kode hash

Maka akan terlihat seperti ini.

commit 1af04a60013c8df1b0107ef29755b70feca402da (HEAD -> main, sh/main)
gpg: Signature made Fri 14 Jun 2024 07:44:44 PM WIB
gpg:                using EDDSA key 5A131FCDDAC2876802F631D1D7B52C04D9B41849
gpg: Good signature from "Hervy Email Kerja (Test) <kerja@mail.org>" [ultimate]
Primary key fingerprint: 5A13 1FCD DAC2 8768 02F6  31D1 D7B5 2C04 D9B4 1849
Author: Hervy Email Kerja <kerja@mail.org>
Date:   Fri Jun 14 19:44:44 2024 +0700

Tertulis Good signature from penanda yang asli pada header log. Menggunakan GnuPG, Git dan OpenSSH sangat direkomendasikan karena bisa memberikan jejak validasi secara tertulis.

Dalam artikel ini menjelaskan tentang:

Penulisan artikel ini menggunakan sistem operasi OpenBSD, sebab bertujuan untuk mempersempit cakupan pembahasan agar tidak melebar ke semua sistem operasi (bisa jadi artikel menjadi berhalaman-halaman jika ditulis ke dalam banyak sistem operasi). Alasan kedua, saat ini tidak memasang sistem operasi lain selain OpenBSD.

Tetapi perlu diketahui semua perkakas yang digunakan di tulisan ini baik GnuPG, OpenSSH, dan Git merupakan Open Source sehingga bisa diterapkan di sistem operasi lain seperti Linux-based, Windows atau MacOS. Dalam penjelasan ini, Anda bisa langsung menuju tahapan yang diperlukan saja.

Konfigurasi Kunci GnuPG

Pemasangan GnuPG

Berbagai macam sistem operasi dapat dipasang GnuPG. Pengguna dapat memilih panduan berdasarkan sistem operasi yang digunakan saat ini.

OpenBSD

pkg_add gnupg

FreeBSD

pkg install gnupg

Mengecek versi GnuPG

Hal pertama jika setelah memasang GnuPG adalah mengecek versinya dengan gpg.

gpg --version
gpg (GnuPG) 2.4.5
libgcrypt 1.10.3
Copyright (C) 2024 g10 Code GmbH
License GNU GPL-3.0-or-later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: /home/hervyqa/.gnupg
Supported algorithms:
Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
        CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2

Sebagai contoh, versi diatas menggunakan versi 2.4.5.

Membuat kunci GnuPG baru

Jika versi yang pengguna gunakan 2.1.17 atau diatasnya maka disarankan menggunakan perintah terminal ini.

gpg --full-generate-key

Sedangkan jika di bawah versi 2.1.17 maka gunakan --gen-key.

gpg --default-new-key-algo rsa4096 --gen-key

Memilih algoritma kunci

Setelah menjalankan perintah tersebut, maka akan muncul pilihan jenis algoritma kunci yang akan digunakan.

gpg (GnuPG) 2.4.5; Copyright (C) 2024 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

gpg: directory '/home/hervyqa/.gnupg' created
Please select what kind of key you want:
   (1) RSA and RSA
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
   (9) ECC (sign and encrypt) *default*
  (10) ECC (sign only)
  (14) Existing key from card
Your selection?

Ada beberapa pilihan dari 1, 2, 3, 4, 9, 10, 14. Tekan enter saja langsung untuk memilih nomer 9 ECC (sign and encrypt) sebagai bawaannya.

Selanjutnya pilih jenis kurva elips yang akan digunakan.

Please select which elliptic curve you want:
   (1) Curve 25519 *default*
   (4) NIST P-384
   (6) Brainpool P-256
Your selection?

Tekan enter, untuk memilih nomer 1 Curve 25519 sebagai bawaannya.

Memilih batas waktu kedaluwarsa kunci GnuPG

Selanjutnya pilih waktu kedaluwarsa kuncinya. Disarankan memilih 0 untuk memilih tanpa waktu kedaluwarsa.

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

Pilih 0, untuk memilih nomer 0 key does not expire dan pilih y, untuk mengkonfirmasinya.

Key is valid for? (0)
Key does not expire at all
Is this correct? (y/N)

Masukkan data pengguna GnuPG

Selanjutnya memasukkan data GnuPG pengguna. Masukkan nama, surel dan komentar. Sebagai contoh:

  • Nama asli: Hervy Email Kerja
  • Alamat email: kerja@mail.org
  • Komentar: Test
Real name: Hervy Email Kerja
Email address: kerja@mail.org
Comment: Test

Maka hasil data pengguna kunci GnuPG akan terlihat seperti ini.

You selected this USER-ID:
    "Hervy Email Kerja (Test) <kerja@mail.org>"

Jika ingin mengkonfirmasi, pilih o (okay).

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

Pastikan tidak ada galat/error yang muncul di keluaran terminal. Contoh keluaran yang berhasil seperti di bawah ini.

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: /home/hervyqa/.gnupg/trustdb.gpg: trustdb created
gpg: directory '/home/hervyqa/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/home/hervyqa/.gnupg/openpgp-revocs.d/5A131FCDDAC2876802F631D1D7B52C04D9B41849.rev'
public and secret key created and signed.

pub   ed25519 2024-06-06 [SC]
      5A131FCDDAC2876802F631D1D7B52C04D9B41849
uid                      Hervy Email Kerja (Test) <kerja@mail.org>
sub   cv25519 2024-06-06 [E]

Melihat kunci ID GnuPG

gpg --list-secret-keys --keyid-format long
/home/hervyqa/.gnupg/pubring.kbx
--------------------------------
sec   ed25519/D7B52C04D9B41849 2024-06-06 [SC]
      Key fingerprint = 5A13 1FCD DAC2 8768 02F6  31D1 D7B5 2C04 D9B4 1849
uid                 [ultimate] Hervy Email Kerja (Test) <kerja@mail.org>
ssb   cv25519/1CC5EEC8BDE8BC06 2024-06-06 [E]

Dapat diketahui bahwa kunci pengguna yaitu:

  • Kunci ID = D7B52C04D9B41849
  • Kunci fingerprint = 5A13 1FCD DAC2 8768 02F6 31D1 D7B5 2C04 D9B4 1849

Kunci ID GnuPG dapat diintegrasikan ke pengaturan OpenSSH di langkah selanjutnya.

Konfigurasi Kunci SSH

OpenSSH (OpenBSD Secure Shell) adalah salah satu perkakas untuk pengamanan protokol jaringan yang berbasis Secure Socket Shell. OpenSSH terintegrasi dengan beberapa sistem operasi seperti Windows, macOS dan kebanyakan distribusi Linux.

SSH memiliki beberapa konteks yaitu antara lain:

  1. Merujuk ke protokol jaringan Secure Socket Shell.
  2. Merujuk pada perangkat lunak OpenSSH.
  3. Merujuk pada perusahaan komersil yang bernama SSH.com.

Sebagai klarifikasi, dalam artikel ini menggunakan dua konteks, yaitu nomer 1 dan 2. Nomer 3 tidak mungkin karena bukan ranahnya tulisan ini dan bukan hal teknikal. Agar jelas, artikel hanya menggunakan dua konteks tersebut.

  1. SSH sebagai protokol jaringan, yang mana yang dimaksudkan adalah Secure Socket Shell. Sehingga yang dimaksudkan Kunci SSH adalah kunci otentikasi yang digunakan untuk protokol jaringan SSH.
  2. Perangkat lunak yang dapat mengatur, menjalankan dan menghasilkan Kunci SSH adalah Perangkat lunak OpenSSH.

Pemasangan OpenSSH

Sama halnya dengan GnuPG, OpenSSH dapat dipasang di platform mana saja, terutama di GNU/Linux.

OpenBSD

pkg_add openssh

FreeBSD

pkg install openssh

Mengecek versi OpenSSH

Setiap sistem operasi kemungkinan memiliki versi OpenSSH yang berbeda-beda, pengguna dapat melihat versi Git dengan perintah ini.

ssh -V
OpenSSH_9.7p1, OpenSSL 3.0.13 30 Jan 2024

Sebagai contoh, versi diatas menggunakan versi 9.7p1.

Mengecek Kunci SSH

Kunci SSH digunakan untuk otentikasi ke kendali jarak jauh (remote control). Hal yang paling sering digunakan untuk login ke git forge seperti sourcehut, github atau gitlab.

Sebelum mengkonfigurasi pastikan dahulu tidak ada kunci SSH di direktori ~/.ssh. Anda dapat mengeceknya dengan perintah terminal ini.

ls -al ~/.ssh
Permissions Size User    Date Modified Name
.rw-------   203 hervyqa 21 Mar 07:09  config
.rw-------   464 hervyqa 21 Mar 07:09  id_ed25519
.rw-------    99 hervyqa 21 Mar 07:09  id_ed25519.pub
.rw-------  3.6k hervyqa 21 Mar 07:09  known_hosts

Umumnya terdapat salah satu dari tiga jenis berkas kunci publik ini:

  • id_rsa.pub
  • id_ecdsa.pub
  • id_ed25519.pub

Jika masih kosong, bisa melanjutkan ke tahap berikutnya untuk membuat kunci SSH yang baru.

Membuat Kunci SSH baru

ssh-keygen -t ed25519 -C "kerja@mail.com"

Jika tidak berhasil, muncul invalid format atau feature not support maka ada keamanan perangkat keras yang mana perlu menggunakan algoritma ecdsa-sk.

ssh-keygen -t ecdsa-sk -C "kerja@mail.com"

Langsung tekan enter saja untuk memilih lokasi direktori bawaan.

Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/hervyqa/.ssh/id_ed25519): (ENTER)
Created directory '/home/hervyqa/.ssh'.

Selanjutnya memasukkan kata sandi rahasia pengguna.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Jika berhasil maka terlihat keluaran seperti ini.

Your identification has been saved in /home/hervyqa/.ssh/id_ed25519
Your public key has been saved in /home/hervyqa/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:KUfzOkl2FyOf5/30nIEH60jrdNV2HafUCl8fdjgVBL8 kerja@mail.com
The key's randomart image is:
+--[ED25519 256]--+
|             .ooo|
|              .+ |
|        o . + +==|
|       . + o B.=X|
|      . S o +.=E*|
|       = + . o=o.|
|        +  o +.oo|
|         .o = .o=|
|          .+ . .+|
+----[SHA256]-----+

Perlu diingat, berdasarkan keluaran diatas ada dua berkas yang harus diketahui:

  • Kunci privat/rahasia terletak di: ~/.ssh/id_ed25519.
  • Kunci publik terletak di: ~/.ssh/id_ed25519.pub.

Kunci yang dapat dibagikan yaitu id_ed25519.pub karena bersifat publik.

Mengganti Email SSH

Jika ingin mengganti nama email SSH yang lama, pengguna dapat menggunakan perintah berikut ini.

ssh-keygen -c -f ~/.ssh/id_ed25519 -C "namabaru@mail.com"
  • -c mengganti komentar di kunci privat dan publik.
  • -f nama berkas kunci privat.
  • -C nama komentar dari kunci yang dihasilkan.

Menambahkan Kunci SSH ke ssh-agent

Dengan menambahkan kunci SSH ke ssh-agent, jika bekerja dengan git/gitui/lazygit di lingkungan terminal maka pengguna hanya sekali memasukkan kata sandi. Ketika git push/git pull dengan SSH, maka perintah akan dieksekusi secara langsung tanpa memasukkan kata sandi untuk kedepannya. Sehingga ssh-agent sangat bermanfaat dan memudahkan bagi pengguna.

Berikut ini perintah menjalankan ssh-agent di latar belakang.

eval "$(ssh-agent -s)"

Kemudian tambahkan kunci privat dengan ssh-add.

ssh-add ~/.ssh/id_ed25519

Konfigurasi Git

Pemasangan Git

Git juga dapat dipasang di platform mana saja. Khususnya di GNU/Linux.

OpenBSD

pkg_add git

FreeBSD

pkg install git

Mengecek versi Git

Setiap sistem operasi kemungkinan memiliki versi Git yang berbeda-beda, pengguna dapat melihat versi Git dengan perintah ini.

git --version
git version 2.44.1

Sebagai contoh, versi diatas menggunakan versi 2.44.1.

Menambahkan Nama Pengguna dan Surel

Tambahkan nama pengguna dan surel yang aktif. Nama pengguna menggunakan nama yang berasal dari akun git forge seperti Sourehut, Github, Gitlab, Codeberg atau lainnya. Sebagai contoh akan menggunakan hervyqa dan kerja@mail.com

git config --global user.name 'hervyqa'
git config --global user.email 'kerja@mail.org'

Menambahkan Kunci ID GnuPG ke Git

Selanjutnya tambahkan ID kunci GnuPG ke dalam konfigurasi Git. ID dapat dilihat di cara melihat ID kunci GnuPG di langkah sebelumnya.

git config --global user.signingkey D7B52C04D9B41849

Ager tidak menambahkan --gpg-sign secara manual, maka bisa menambahkan konfigurasi ini.

git config --global commit.gpgsign true

Sekaligus jika ingin membuat tag tanpa perlu --gpg-sign secara manual.

git config --global tag.gpgsign true

Pengaturan tambahan untuk mengganti nama cabang dari master ke main.

git config --global init.defaultBranch main

Melihat Semua Konfigurasi Git

Jika ingin melihat konfigurasi yang sudah diatur sebelumnya, dapat menggunakan perintah di bawah ini.

git config --global --list

Konfigurasi tersebut juga dapat dilihat di direktori ~/.config/git. Kurang lebih konfigurasinya terlihat seperti ini.

cat ~/.config/git/config
[commit]
        gpgSign = true

[init]
        defaultBranch = "main"

[tag]
        gpgSign = true

[user]
        email = "kerja@mail.org"
        name = "Hervy Email Kerja"
        signingKey = "D7B52C04D9B41849"

Akhir kata

Demikian, penjelasan di atas menggunakan CLI sehingga lebih lama dan tidak instan. Pengguna bisa saja menggunakan perangkat lunak GUI (Client) untuk manajemen GnuPG, OpenSSH dan Git. Tetapi tujuannya bukan seperti itu. Harapannya, pembaca dapat mengetahui proses dan perintah CLI-nya agar dapat mengetahui proses secara lebih baik. Tentu menambah literasi dalam penggunaan OpenSSH dan Git sangat membantu untuk proses pengembangan perangkat lunak dan pemrograman.