Mengaktifkan https / SSL pada reverse proxy nginx

1
418
Nginx - HTTPS - SSL

Saat ini Secure Sockets Layer (SSL) / https telah menjadi kebutuhan untuk sebuah server web. Alasan utamanya adalah soal keamanan. Berdasarkan laporan yang dibuat oleh symantec pada 2019 serangan melalui web meningkat sebanyak 56%. Oleh karenanya saat ini website dengan SSL sudah menjadi semacam standar minimal.

Di 2014, google mengumumkan bahwa HTTPS menjadi salah satu faktor yang menentukan posisi sebuah website dalam search engine miliknya. Tidak hanya itu, google akan memberi tanda tidak aman ( Not Secure ) untuk website yg belum menggunakan HTTPS.

Kalau sudah begitu, website berjenis e-commerce tentu akan diragukan dan orang tidak akan mau berbelanja. Sebuah survei menemukan angka 86% pengunjung sebuah ecommerce akan membatalkan belanja mereka pada sebuah website tanpa HTTPS karena merasa tidak aman.

Apa itu HTTPS & Cara Kerjanya

Saat kita mengunjungi sebuah halaman website dengan HTTP, semua komunikasi dilakukan dalam bentuk plain text dan ini menyebabkan isi dari koneksi dapat dengan mudah dibaca oleh siapapun yang dapat menyela koneksi antara browser dengan website.

Huruf “S” dari HTTPS itu sendiri bermakna “Secure” yang artinya memiliki koneksi yang aman. Berbeda dengan koneksi HTTP, saat kita mengunjungi halaman website dengan https, browser yg kita gunakan akan me-request sertifikatnya. Didalam sertifikat tersebut mengandung kunci yang akan dibuka oleh browser untuk membuat sebuah sesi selama kita membuka website. Sertifikat ini akan membuat koneksi aman yang unik setiap kali kita membuka halaman website.

Sudah cukup perkenalan dengan https nya, sekarang kita mulai dengan konfigurasi pada nginx.

Konfigurasi Nginx

Sebagai catatan, konfigurasi yang akan kita lakukan disini melanjutkan artikel sebelumnya yang membahas tentang bagaimana membuat reverse proxy dan kita akan menggunakan Sertifikat yang tidak terverifikasi (self-signed certificate).

Self-signed certificate

Langkah pertama kita akan generate sertifikat sendiri. Untuk melakukannya dengan menjalankan perintah sebagai berikut:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt

Setelah tekn enter kita akan diminta menjawab beberapa pertanyaan semacam negara, propinsi, dsb. Pertanyaan yg paling penting untuk dijawab adalah bagian Common Name. Jawaban bisa berupa alamat IP server atau domain website yang akan digunakan. Contohnya:

$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt

Generating a RSA private key
.............................................+++++
................................................+++++
writing new private key to '/etc/ssl/private/nginx-selfsigned.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]:Banten
Locality Name (eg, city) []:Tangerang
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Karedok Network
Organizational Unit Name (eg, section) []:Oprek team
Common Name (e.g. server FQDN or YOUR name) []:oprek.karedok.net
Email Address []:[email protected]

Kalau tidak ada kendala, kita bisa lihat file sertifikatnya di direktori /etc/ssl

Konfigurasi

kita buka kembali file oprek.conf yang menyimpan konfigurasi nginx.

nano /etc/nginx/conf.d/oprek.conf

Tambahkan baris kode berikut dibawah upstream yg sudah ada, menjadi:

upstream oprek8080 {
    server 127.0.0.1:8080;
}

 upstream oprek4433 {
    server 127.0.0.1:4433;
} 

Rubah bagian blok server {} menjadi :

server {
    listen 80;
    listen [::]:80;

    server_name oprek.karedok.net;

    location / {
        proxy_pass http://oprek8080;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Port $server_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

 server {
    listen 443 ssl;
    listen [::]:443 ssl;

    ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt; 
    ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key; 

    server_name oprek.karedok.net;

    location / {
        proxy_pass https://oprek4433;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Port $server_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
} 

Cek konfigurasi kita apakah tidak ada error dengan menjalankan perintah:

nginx -t

Jika hasilnya sebagai berikut:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Artinya konfigurasi kita aman, tidak ada masalah.

Sekarang restart service nginx.

sudo service nginx restart

Jika tidak ada masalah, berarti konfigurasi sudah selesai…

Salam #ngoprek…

Catatan:

1 KOMENTAR

Mari diskusi

This site uses Akismet to reduce spam. Learn how your comment data is processed.