Mengamankan Koneksi Server dengan TLS / SSL

Jika kamu mempunyai server untuk publik yang memiliki layanan umum seperti SMTP, POP3 dan web maka kamu harus merancang keamanan untuk server kamu. salah satu cara mengamankan server adalah dengan membatasi akses ke server. Pada prinsipnya cara ini akan menyaring koneksi yang menuju atau keluar dari server. Koneksi hanya dibatasi untuk koneksi yang memang kita ijinkan, sedangkan yang lainnya ditolak.

Karena mungkin saja koneksi tersebut tidak aman, dalam artian bahwa koneksi yang sedang berlangsung dapat diintip dengan menggunakan aplikasi penyadap jaringan (sniffer) oleh pihak lain untuk mendapatkan informasi berharga seperti nama pengguna, email, ataupun sandi.

Hal ini dapat dilakukan karena paket data ataupun koneksi yang berlangsung dikirimkan dalam bentuk teks polos. Untuk itulah teknologi enkripsi dipakai untuk membungkus koneksi agar lebih aman. Teknologi enkripsi digunakan server untuk mengenkripsi paket data terlebih dahulu yang kemudian baru dikirimkan ke klien. Disini kita akan membahas bagaimana caranya menggunakan TLS/SSL untuk mengamankan koneksi server. TLS/SSL dapat digunakan untuk mengamankan semua koneksi server yang mendukung TLS/SSL seperti server email, web, dan LDAP.

Disini kita akan menggunakan aplikasi OpenSSL. OpenSSL merupakan aplikasi yang menerapkan protokol SSL (Secure Socket Layer) dan TLS (Transport Layer Socket). Aplikasi yang digunakan untuk membuat sertifikat yang dibutuhkan oleh server dan aplikasi server untuk mengamankan koneksinya.

Langkah 1: Instalasi

Update repo dan instal openssl

$ sudo apt update
$ sudo apt install openssl

Langkah 2: Membuat Sertifikat Tertandatangan Sendiri

Ada dua cara untuk membuat sertifikat yang ditandatangani sendiri, yaitu dengan cara langsung tanpa membuat CA ataupun dengan membuat CA terlebih dahulu yang kemudian akan digunakan untuk menandatangani semua sertifikat untuk setiap host ataupun aplikasi yang membutuhkan.

Pertama kita buat kunci pribadi CA

$ openssl genrsa -des3 -out ca-example.web.id.key 4096
Generating RSA private key, 4096 bit long modulus
......................++
.......................................++
e is 65537 (0x010001)
Enter pass phrase for ca-example.web.id.key:
Verifying - Enter pass phrase for ca-example.web.id.key:

Perintah diatas akan memanggil aplikasi genrsa untuk membuat kunci pribadi CA dengan menggunakan cipher DES3 dan panjang 4096 bit. Kunci pribadi ini akan disimpan ke dalam berkas ca-example.web.id.key.

Kita harus menyimpan baik-baik kunci pribadi yang kita miliki. Jangan biarkan pihak lain bahkan membaca kunci pribadi server kamu. Demi keamanan, ubah hak akses ke berkas kunci pribadi kamu ke 600 dan ubah kepemilikan berkas tersebut ke root.

$ sudo chmod 600 ca.example.web.id.key
$ sudo chown root ca.example.web.id.key

Selanjutnya kita buat sertifkat publik CA

$ openssl req -new -x509 -days 365 -key ca-example.web.id.key -out ca-example.web.id.crt
Enter pass phrase for ca-example.web.id.key: ******
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:ID
State or Province Name (full name) [Some-State]:Central Java
Locality Name (eg, city) []:Surakarta
Organization Name (eg, company) [Internet Widgits Pty Ltd]:PT Example
Organizational Unit Name (eg, section) []:IT Division - PT Example
Common Name (e.g. server FQDN or YOUR name) []:example.web.id
Email Address []:admin@example.web.id

Perintah diatas akan memanggil aplikasi req untuk membuat sertifikat publik ca-example.web.id.crt baru dengan menggunakan kunci pribadi CA ca-example.web.id.key yang telah kita buat tadi. Sertifikat publik yang kita buat berlaku selama 365 hari atau setahun.

Perintah tersebut akan menggunakan kunci pribadi CA sehingga akan meminta sandi untuk kunci pribadi tersebut. Perintah ini juga akan meminta informasi yang diperlukan untuk memasukkan nama umum ke dalam sertifikat. Gunakan nama domain sebagai nama umum untuk sertifikat CA.

Khusus untuk pertanyaan Common Name, kamu harus menjawabnya sama dengan nama domain kamu, untuk kasus ini yaitu example.web.id.

Jika kamu berencana untuk menggunakan jasa CA komersial untuk menandatangani sertifikat permohonan, kamu cukup mengirimkan berkas sertifikat permohonan (CSR). Dalam kasus domain example.web.id, dapat dikirimkan sertifikat publik CA example.web.id yang dibuat tanpa opsi -x509.

Membuat sertifikat permohonan yang nanti akan ditandatangi oleh CA

$ openssl req -new -key example.web.id.key -out example.web.id.csr
Enter pass phrase for ca-example.web.id.key: ******
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:ID
State or Province Name (full name) [Some-State]:Central Java
Locality Name (eg, city) []:Surakarta
Organization Name (eg, company) [Internet Widgits Pty Ltd]:PT Example
Organizational Unit Name (eg, section) []:IT - PT Example
Common Name (e.g. server FQDN or YOUR name) []:example.web.id
Email Address []:admin@example.web.id

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:       
An optional company name []:

Untuk dua pertanyaan ekstra yg terakhir, tidak perlu diisi bisa langsung di tekan enter saja.

Sedikit penjelasan:

genrsa Aplikasi ini untuk membuat kunci pribadi dengan menggunakan algoritma RSA.

req Aplikasi ini untuk membuat sertifikat memproses sertifikat dalam format PKCS#10. Dapat juga digunakan untuk membuat sertifikat bertandatangan sendiri.

x509 Aplikasi ini dapat digunakan untuk menampilkan informasi sertifikat, mengubah, menandatangani sertifikat, dan mengedit sertifikat.

ca Aplikasi ini dapat digunakan untuk menandatangani sertifikat permohonan.

Kesimpulan

Sertifikat yang kita tandatangani sendiri bisa dikatakan diragukan keabsahannya. Mengapa? Kita pikir logika nya saja. Siapa yang percaya sertifikat yang dibuat lalu ditandatangani sendiri? Tidak ada. Oleh karena itu CA komersial memanfaatkan celah ini dengan menyediakan jasa untuk memvalidasi keabsahan dari sertifikat yang kita buat.

Sekarang siapa yang memvalidasi keabsahan CA komersial tersebut? Jawabannya adalah tidak ada. Sertifikat mereka menjadi dapat dipercaya karena sertifikat publik mereka sudah terdapat di dalam aplikasi klien seperti browser. Sehingga aplikasi klien tersebut menganggap sertifikat dapat dipercaya. Jadi semua sertifikat yang ditandatangani oleh CA komersial tersebut dianggap dapat dipercaya.

dah gitu aja, see ya~