Persiapan:
Jalankan perintah berikut di ubuntu server anda:
sudo -i
export NAMA=budiaudit
date; curl -sSI https://badssl.com/ | head -n 1
silahkan ganti budi, gunakan nama panggilan+audit.
Bagian A: HSTS di badssl.com
badssl menyediakan halaman uji khusus HSTS: hsts.badssl.com, preloaded-hsts.badssl.com, dan subdomain.preloaded-hsts.badssl.com.
A1. Browser laptop. Buka berurutan dan screenshot setiap hasilnya:
http://http.badssl.com(perhatikan label “Not secure”)https://hsts.badssl.com, lalu ketik ulang alamatnya denganhttp://hsts.badssl.com(apakah browser langsung memakai HTTPS?)https://preloaded-hsts.badssl.comhttps://subdomain.preloaded-hsts.badssl.com(perhatikan pesan eror nya dan apakah ada tombol untuk melanjutkan)
A2. Terminal VM:
curl -sI https://hsts.badssl.com/ | grep -i strict
curl -sI https://preloaded-hsts.badssl.com/ | grep -i strict
curl -sI http://http.badssl.com/ | head -n 1
Tugas A: isi tabel (situs, header Strict-Transport-Security yang kamu salin, arti max-age dan includeSubDomains dan preload di header itu, perilaku browser). Situs badssl bisa berubah, jadi catat apa adanya.
Bagian B: Bangun HTTPS “audit”
B1. Paket, hosts, key, dan sertifikat:
apt update && apt install -y apache2 openssl
echo ServerName localhost > /etc/apache2/conf-available/servername.conf && a2enconf servername
echo 127.0.0.1 admin.$NAMA.test >> /etc/hosts
mkdir -p /etc/apache2/sertifikat /var/www/audit
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/sertifikat/$NAMA.key -out /etc/apache2/sertifikat/$NAMA.crt -subj /C=ID/O=Praktikum/CN=admin.$NAMA.test -addext subjectAltName=DNS:admin.$NAMA.test
chmod 600 /etc/apache2/sertifikat/$NAMA.key; chmod 644 /etc/apache2/sertifikat/$NAMA.crt
B2. Halaman dan Virtual Host:
a2enmod ssl
echo "<h1>Lab Audit HTTPS $NAMA</h1>" > /var/www/audit/index.html
cat > /etc/apache2/sites-available/40-audit-https.conf <<EOF
<VirtualHost *:80>
ServerName admin.$NAMA.test
Redirect permanent / https://admin.$NAMA.test/
</VirtualHost>
<VirtualHost *:443>
ServerName admin.$NAMA.test
DocumentRoot /var/www/audit
SSLEngine on
SSLCertificateFile /etc/apache2/sertifikat/$NAMA.crt
SSLCertificateKeyFile /etc/apache2/sertifikat/$NAMA.key
<Directory /var/www/audit>
Require all granted
</Directory>
</VirtualHost>
EOF
a2ensite 40-audit-https.conf
apache2ctl configtest && systemctl restart apache2
apache2ctl -S
ss -ltnp | grep -E ':(80|443)'
apache2ctl -S akan menampilkan Virtual Host dari kemarin juga.
B3. Dua bukti dasar:
curl -sI http://admin.$NAMA.test | head -n 3
curl -sI --cacert /etc/apache2/sertifikat/$NAMA.crt https://admin.$NAMA.test | head -n 1
Hasil: 301 dengan Location ke HTTPS, lalu 200 OK.
Bagian C: HSTS lokal
C1. Kondisi awal belum ada HSTS:
curl -sI --cacert /etc/apache2/sertifikat/$NAMA.crt https://admin.$NAMA.test | grep -i strict
curl -sI http://admin.$NAMA.test | head -n 1
Baris pertama kosong. Baris kedua 301.
C2. Aktifkan HSTS dengan max-age pendek
a2enmod headers
printf '<IfModule mod_headers.c>\n Header always set Strict-Transport-Security max-age=300\n</IfModule>\n' > /etc/apache2/conf-available/hsts.conf
a2enconf hsts
apache2ctl configtest && systemctl restart apache2
curl -sI --cacert /etc/apache2/sertifikat/$NAMA.crt https://admin.$NAMA.test | grep -i strict
curl -sI http://admin.$NAMA.test | grep -i strict
Header muncul di respons HTTPS. Pada respons HTTP, header kemungkinan juga muncul. Pertanyaan: mengapa browser mengabaikan header HSTS yang datang lewat HTTP biasa?
C3. Buktikan HSTS bekerja , dengan cache HSTS milik curl:
rm -f /tmp/hsts.txt
curl -sI --hsts /tmp/hsts.txt --cacert /etc/apache2/sertifikat/$NAMA.crt https://admin.$NAMA.test | head -n 1
cat /tmp/hsts.txt
curl -sv --hsts /tmp/hsts.txt --cacert /etc/apache2/sertifikat/$NAMA.crt http://admin.$NAMA.test 2>&1 | grep -iE 'hsts|< HTTP'
curl -sI http://admin.$NAMA.test | head -n 1
Yang harus terlihat: file /tmp/hsts.txt berisi admin.$NAMA.test beserta waktu kedaluwarsa. Perintah ketiga menunjukkan pesan peralihan ke HTTPS karena HSTS dan langsung 200, tanpa 301. Perintah keempat (tanpa cache) tetap 301. Jika grep tidak menampilkan apa-apa, jalankan tanpa grep dan salin keluarannya apa adanya.
C4. Analisis syarat preload . Bandingkan header buatanmu dengan syarat daftar preload. Menurut hstspreload.org, syaratnya adalah max-age minimal satu tahun, includeSubDomains, token preload, dan pengalihan HTTP ke HTTPS. Tulis tabel: syarat, terpenuhi atau tidak, alasan. Jelaskan juga mengapa lab tidak boleh memakai max-age panjang atau preload
Bagian D:
- Apa yang berbeda antara respons
curldengan dan tanpa cache HSTS pada C3? - Mengapa browser mengabaikan header HSTS dari koneksi yang sertifikatnya tidak tepercaya?
- Apa risiko memberi
max-agesatu tahun pada domain yang sertifikatnya bermasalah? - Apa bedanya halaman
hsts.badssl.comdanpreloaded-hsts.badssl.combagi pengguna yang belum pernah berkunjung?
Pembersihan setelah screenshot selesai:
a2disconf hsts; a2dissite 40-audit-https.conf; systemctl reload apache2
Kumpulkan: tabel badssl, hasil B3, hasil C1 sampai C3, tabel preload, history 150, dan jawaban bagian D
