Praktikum HTTPS Server - Ubuntu 24.04

📌 Tujuan Praktikum

Setelah mengikuti praktikum ini, Anda diharapkan mampu:

  • Memahami perbedaan HTTP dan HTTPS serta keuntungan dan kekurangannya
  • Memahami cara kerja SSL/TLS dalam mengamankan komunikasi
  • Mengaktifkan modul SSL pada Apache2
  • Membuat dan mengkonfigurasi sertifikat SSL self-signed
  • Mengkonfigurasi Virtual Host HTTPS untuk domain smk-tkj.lmn
  • Melakukan redirect HTTP ke HTTPS secara otomatis
1. Pengertian HTTP dan HTTPS Teori

HTTP (Hypertext Transfer Protocol) adalah protokol yang digunakan untuk mentransfer data antara client (browser) dan server. Sedangkan HTTPS (HTTP Secure) adalah versi aman dari HTTP dengan tambahan lapisan enkripsi menggunakan SSL/TLS.

Analogi Sederhana:

Bayangkan Anda mengirim surat melalui pos. HTTP seperti mengirim surat di amplop transparan — semua orang bisa membaca isinya. Sedangkan HTTPS seperti mengirim surat di amplop tertutup rapat dengan segel — hanya penerima yang bisa membukanya. Enkripsi SSL/TLS adalah "segel" yang melindungi data Anda.

📋 Perbedaan HTTP dan HTTPS

HTTP
  • Tidak Aman — Data dikirim dalam bentuk teks
  • Mudah Disadap — Siapa pun bisa melihat data
  • Rentan Man-in-the-Middle — Data bisa diubah
  • Lebih Cepat — Tanpa proses enkripsi
  • Port 80 — Port default untuk HTTP
  • Digunakan untuk: Website non-sensitif
HTTPS
  • Aman — Data dienkripsi dengan SSL/TLS
  • Tidak Bisa Disadap — Data terenkripsi
  • Terlindungi dari MITM — Integritas data terjaga
  • Sedikit Lebih Lambat — Ada proses enkripsi
  • Port 443 — Port default untuk HTTPS
  • Digunakan untuk: Login, transaksi, data sensitif
💡 Catatan: Saat ini, HTTPS sudah menjadi standar wajib untuk semua website. Browser seperti Chrome dan Firefox akan menampilkan peringatan "Tidak Aman" pada website yang masih menggunakan HTTP.

🔑 Keuntungan Menggunakan HTTPS

  • Keamanan Data: Data terenkripsi sehingga tidak bisa dibaca oleh pihak ketiga
  • Integritas Data: Data tidak bisa diubah selama perjalanan
  • Autentikasi Server: Memastikan client terhubung ke server yang benar
  • SEO Friendly: Google memberikan peringkat lebih tinggi untuk website HTTPS
  • Trust & Credibility: Pengguna lebih percaya pada website dengan HTTPS
  • Wajib untuk Transaksi: Diperlukan untuk payment gateway dan login

⚠️ Kekurangan Menggunakan HTTPS

  • Performa Sedikit Lebih Lambat: Proses enkripsi/dekripsi membutuhkan resource CPU
  • Biaya Sertifikat: Sertifikat dari CA berbayar (kecuali Let's Encrypt gratis)
  • Kompleksitas Konfigurasi: Memerlukan pengaturan tambahan pada server
  • Manajemen Sertifikat: Sertifikat memiliki masa berlaku dan harus diperbarui
💡 Kesimpulan:

Meskipun HTTPS memiliki kekurangan seperti performa yang sedikit lebih lambat dan kompleksitas konfigurasi, keamanan yang ditawarkan jauh lebih penting terutama untuk website yang menangani data sensitif pengguna. Saat ini, HTTPS adalah keharusan bukan lagi pilihan.

2. Cara Kerja SSL/TLS Teori

SSL (Secure Sockets Layer) dan TLS (Transport Layer Security) adalah protokol kriptografi yang menyediakan komunikasi aman di jaringan. TLS adalah versi terbaru dan lebih aman dari SSL.

📋 Proses Handshake SSL/TLS

  1. Client Hello: Browser mengirim permintaan ke server
  2. Server Hello: Server merespons dengan sertifikat SSL
  3. Verifikasi Sertifikat: Browser memverifikasi sertifikat server
  4. Pertukaran Kunci: Client dan server sepakat menggunakan kunci enkripsi
  5. Koneksi Aman: Data mulai ditransfer dengan enkripsi

📋 Jenis Sertifikat SSL

JenisKeteranganBiaya
Self-Signed Dibuat sendiri, hanya untuk testing/development Gratis
Domain Validation (DV) Memverifikasi kepemilikan domain, cocok untuk website biasa Gratis (Let's Encrypt) / Berbayar
Organization Validation (OV) Memverifikasi organisasi, untuk bisnis Berbayar
Extended Validation (EV) Verifikasi paling ketat, untuk e-commerce besar Berbayar
💡 Catatan: Pada praktikum ini, kita akan menggunakan Self-Signed untuk testing dan Let's Encrypt untuk produksi (domain publik).
3. Skenario & Topologi Desain

Pada praktikum ini, kita akan mengkonfigurasi HTTPS pada Web Server dengan spesifikasi berikut:

KomponenKeterangan
Sistem OperasiUbuntu Server 24.04 LTS
IP Address Server192.168.10.20/24
Gateway192.168.10.1
Web ServerApache2 + mod_ssl
SertifikatSelf-Signed / Let's Encrypt
Domainsmk-tkj.lmn
HTTP Port80 (redirect ke HTTPS)
HTTPS Port443
Topologi Jaringan HTTPS Server
Gambar 1: Topologi Jaringan HTTPS Server
Keterangan Topologi:
  • Router → Gateway (192.168.10.1) dan sumber jaringan
  • Switch → Menghubungkan semua perangkat dalam satu jaringan
  • HTTPS Server → Server dengan IP 192.168.10.20 menjalankan Apache2 + SSL
  • Client → Komputer yang mengakses website melalui browser dengan HTTPS
4. Aktifkan Modul SSL Apache2 Step 1

Langkah pertama adalah mengaktifkan modul SSL pada Apache2 agar server dapat melayani koneksi HTTPS.

📝 Langkah-langkah

1. Cek modul SSL yang tersedia:

sudo a2enmod ssl

2. Cek modul headers (untuk redirect):

sudo a2enmod headers
💡 Catatan: Modul headers diperlukan untuk mengatur redirect dari HTTP ke HTTPS.

3. Restart Apache2:

sudo systemctl restart apache2

4. Verifikasi modul SSL aktif:

sudo apache2ctl -M | grep ssl
✅ Modul SSL berhasil diaktifkan! Apache2 sekarang mendukung HTTPS.
5. Membuat Sertifikat Self-Signed Step 2

Self-Signed Certificate adalah sertifikat yang dibuat sendiri tanpa melibatkan Certificate Authority (CA). Cocok untuk keperluan testing dan development.

📝 Langkah-langkah Membuat Self-Signed Certificate

1. Buat direktori untuk menyimpan sertifikat:

sudo mkdir -p /etc/ssl/smk-tkj

2. Generate sertifikat self-signed:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
 -keyout /etc/ssl/smk-tkj/smk-tkj.key \
 -out /etc/ssl/smk-tkj/smk-tkj.crt
📖 Penjelasan Perintah:
  • openssl req → Perintah untuk membuat sertifikat
  • -x509 → Format sertifikat X.509
  • -nodes → Tidak mengenkripsi private key (tanpa password)
  • -days 365 → Masa berlaku 1 tahun
  • -newkey rsa:2048 → Membuat kunci RSA 2048 bit
  • -keyout → Lokasi private key
  • -out → Lokasi sertifikat

3. Isi data sertifikat (contoh):

Country Name (2 letter code) [AU]: ID
State or Province Name (full name) [Some-State]: Jawa Tengah
Locality Name (eg, city) []: Kota Tegal
Organization Name (eg, company) [Internet Widgits Pty Ltd]: SMK TKJ
Organizational Unit Name (eg, section) []: IT Department
Common Name (e.g. server FQDN or YOUR name) []: smk-tkj.lmn
Email Address []: admin@smk-tkj.lmn
💡 Catatan: Isian Common Name harus diisi dengan domain smk-tkj.lmn agar sertifikat valid untuk domain tersebut.

4. Verifikasi sertifikat yang dibuat:

ls -la /etc/ssl/smk-tkj/
sudo openssl x509 -in /etc/ssl/smk-tkj/smk-tkj.crt -text -noout | grep "Subject:"
✅ Sertifikat self-signed berhasil dibuat! Private key: /etc/ssl/smk-tkj/smk-tkj.key
Sertifikat: /etc/ssl/smk-tkj/smk-tkj.crt
6. Konfigurasi Virtual Host HTTPS Step 3

Kita akan membuat Virtual Host untuk HTTPS (port 443) dan redirect HTTP (port 80) ke HTTPS.

6.1 Konfigurasi Virtual Host HTTPS

1. Copy konfigurasi default SSL:

sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/smk-tkj-ssl.conf

2. Edit file konfigurasi:

sudo nano /etc/apache2/sites-available/smk-tkj-ssl.conf

3. Isi dengan konfigurasi berikut:

<VirtualHost *:443>
    ServerAdmin admin@smk-tkj.lmn
    ServerName smk-tkj.lmn
    ServerAlias www.smk-tkj.lmn
    DocumentRoot /var/www/smk-tkj.lmn

    <Directory /var/www/smk-tkj.lmn>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    # Konfigurasi SSL
    SSLEngine on
    SSLCertificateFile /etc/ssl/smk-tkj/smk-tkj.crt
    SSLCertificateKeyFile /etc/ssl/smk-tkj/smk-tkj.key

    ErrorLog ${APACHE_LOG_DIR}/error_ssl.log
    CustomLog ${APACHE_LOG_DIR}/access_ssl.log combined
</VirtualHost>
📖 Penjelasan Konfigurasi:
  • VirtualHost *:443 → Melayani request di port 443 (HTTPS)
  • SSLEngine on → Mengaktifkan SSL
  • SSLCertificateFile → Lokasi file sertifikat
  • SSLCertificateKeyFile → Lokasi private key

6.2 Konfigurasi Redirect HTTP ke HTTPS

Edit Virtual Host HTTP (port 80):

sudo nano /etc/apache2/sites-available/smk-tkj.lmn.conf

Ubah menjadi:

<VirtualHost *:80>
    ServerName smk-tkj.lmn
    ServerAlias www.smk-tkj.lmn
    Redirect permanent / https://smk-tkj.lmn/
</VirtualHost>
💡 Catatan: Dengan konfigurasi di atas, semua akses ke http://smk-tkj.lmn akan otomatis diarahkan ke https://smk-tkj.lmn.

6.3 Aktifkan Virtual Host

sudo a2ensite smk-tkj-ssl.conf
sudo a2ensite smk-tkj.lmn.conf
sudo systemctl reload apache2
✅ Virtual Host HTTPS berhasil dikonfigurasi!
  • HTTPS: https://smk-tkj.lmn
  • HTTP: http://smk-tkj.lmn (otomatis redirect ke HTTPS)
7. Install Let's Encrypt (Certbot) Step 4 (Opsional)

Let's Encrypt adalah Certificate Authority gratis yang memberikan sertifikat SSL yang valid dan diakui oleh semua browser. Cocok untuk website produksi dengan domain publik.

💡 Catatan: Bagian ini opsional karena membutuhkan domain publik yang terhubung ke internet. Jika hanya untuk testing, gunakan self-signed certificate dari Bab 5.

📝 Langkah-langkah Install Certbot

1. Install Certbot dan plugin Apache:

sudo apt update
sudo apt install certbot python3-certbot-apache -y

2. Generate sertifikat Let's Encrypt:

sudo certbot --apache -d smk-tkj.lmn -d www.smk-tkj.lmn
📖 Penjelasan Perintah:
  • --apache → Menggunakan plugin Apache untuk konfigurasi otomatis
  • -d smk-tkj.lmn → Domain utama
  • -d www.smk-tkj.lmn → Subdomain alias

3. Perbarui sertifikat secara otomatis (cronjob):

sudo systemctl status certbot.timer
sudo certbot renew --dry-run
✅ Let's Encrypt berhasil diinstall! Sertifikat akan diperbarui otomatis setiap 90 hari.
8. Pengujian HTTPS Server Step 5

Lakukan pengujian untuk memastikan HTTPS Server berjalan dengan baik.

8.1 Uji HTTPS via Browser

1. Buka browser dan ketik alamat: https://smk-tkj.lmn

Jika menggunakan self-signed, browser akan menampilkan peringatan keamanan.

Klik "Advanced" → "Proceed to smk-tkj.lmn (unsafe)" untuk melanjutkan.

⚠️ Peringatan Self-Signed:

Sertifikat self-signed tidak diakui oleh browser karena tidak diterbitkan oleh Certificate Authority yang terpercaya. Ini normal untuk keperluan testing/development.

8.2 Uji Redirect HTTP ke HTTPS

2. Buka browser dan ketik alamat: http://smk-tkj.lmn

Seharusnya otomatis redirect ke https://smk-tkj.lmn

8.3 Uji dengan Command Line

Cek sertifikat SSL:

sudo openssl s_client -connect smk-tkj.lmn:443 -servername smk-tkj.lmn

Cek HTTP redirect:

curl -I http://smk-tkj.lmn

Seharusnya menampilkan header Location: https://smk-tkj.lmn/

Cek HTTPS response:

curl -I https://smk-tkj.lmn

Seharusnya menampilkan response 200 OK

✅ HTTPS Server berjalan dengan baik!
  • ✅ HTTPS dapat diakses di port 443
  • ✅ HTTP otomatis redirect ke HTTPS
  • ✅ Sertifikat SSL valid (self-signed atau Let's Encrypt)
9. Keamanan Tambahan Step 6

Beberapa konfigurasi tambahan untuk meningkatkan keamanan HTTPS Server.

📝 Rekomendasi Keamanan

1. Nonaktifkan SSLv3 dan TLSv1.0 (sudah tidak aman):

sudo nano /etc/apache2/conf-available/security.conf

Tambahkan:

SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1

2. Gunakan cipher yang kuat:

SSLCipherSuite HIGH:!aNULL:!MD5

3. Aktifkan HSTS (HTTP Strict Transport Security):

sudo nano /etc/apache2/sites-available/smk-tkj-ssl.conf

Tambahkan di dalam VirtualHost *:443:

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
💡 HSTS: Memaksa browser untuk selalu menggunakan HTTPS selama periode waktu tertentu (1 tahun).

Restart Apache2 setelah perubahan:

sudo systemctl restart apache2
✅ Keamanan tambahan berhasil diterapkan!
10. Kesimpulan Selesai

Dalam praktikum ini, Anda telah berhasil melakukan:

Selanjutnya:

Setelah HTTPS Server berhasil, Anda dapat melanjutkan ke materi berikutnya: Konfigurasi FTP Server untuk transfer file.