Tips Mendapatkan Nilai A+ pada Hasil Qualys SSL Labs dengan Nginx

Posted by

Sebelumnya saya telah menulis panduan untuk mendapatkan hasil nilai A+ pada Qualys SSL dengan menggunakan engine Apache2, bisa dilihat disini panduannya >>> Tips Mendapatkan Nilai A+ pada Hasil Qualys SSL Labs dengan Apache

Nahh untuk kali ini kita akan coba menggunakan Nginx sebagai web server nya, dan akan disetup sedemikian rupa agar ketika di cek pada Qualys SSL, akan mendapatkan nilai A+

Langsung saja berikut tahapannya, disini saya menggunakan Ubuntu 20.04 sebagai OS nya

1. Siapkan file SSL Certificate

Yang pertama dibutuhkan yaitu SSL Certificate, bagi yang belum memilikinya, Excellent provide untuk layanan SSL Certificate tersebut, monggo yang mau baca-baca dahulu kelebihannya, bisa klik disini https://www.excellent.co.id/ssl/

2. Install SSL Certificate pada Virtual Host

Jika sudah memiliki file SSL, siapkan file SSL berformat .pem, kemudian Install SSL tersebut pada salah 1 file virtual host yang akan di setup, biasanya letaknya ada di directory /etc/nginx/sites-available. Di bagian section server untuk listen 443 ssl http2, tambahkan script berikut tepat dibawah server_name

ssl_certificate /etc/nginx/ssl/commercial.pem;
ssl_certificate_key /etc/nginx/ssl/commercial.pem;
ssl_protocols TLSv1.2;

3. Konfigurasi SSL Cipher

Untuk meningkatkan nilai SSL, diwajibkan untuk konfigurasi SSL Cipher ini, misal mendisable cipher yang sudah weak dll. Silakan tambahkan script berikut dibawah ssl_protocol

ssl_prefer_server_ciphers on;
ssl_ciphers TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:TLS-AES-128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4;

4. Aktivasi HSTS

HSTS merupakan mekanisme keamanan website yang memaksa web browser untuk mengakses website hanya via HTTPS. HSTS juga dapat mencegah dari protocol downgrade attacks dan cookie hijacking. Untuk aktivasinya, silakan tambahkan script berikut ini tepat dibawah ssl_ciphers

add_header Strict-Transport-Security "max-age=63072000; preload";

Berikut ini salah satu contoh file virtualhost yang saya set :

server {
access_log /var/log/nginx/nextcloud.rizkypratama.id-access.log;
log_not_found off;
error_log  /var/log/nginx/nextcloud.rizkypratama.id-error_log;

        listen 443 ssl http2;
        server_name  nextcloud.rizkypratama.id; 

        ssl_certificate /etc/nginx/ssl/commercial.pem;
        ssl_certificate_key /etc/nginx/ssl/commercial.pem;
	ssl_protocols TLSv1.2;
	ssl_prefer_server_ciphers on;
	ssl_ciphers TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:TLS-AES-128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4;
	add_header Strict-Transport-Security "max-age=63072000; preload";
	add_header Referrer-Policy no-referrer always;
	add_header X-Content-Type-Options nosniff;
	add_header X-XSS-Protection "1; mode=block";
	add_header X-Robots-Tag none;
	add_header X-Download-Options noopen;
	add_header X-Permitted-Cross-Domain-Policies none;
	add_header X-Frame-Options "SAMEORIGIN";


        location ~* .(gif|jpg|jpeg|png|ico|wmv|3gp|avi|mpg|mpeg|mp4|flv|mp3|mid|js|css|wml|swf)$ {
        root   /var/www/nextcloud;
                expires max;
                add_header Pragma public;
                add_header Cache-Control "public, must-revalidate, proxy-revalidate";
        }

        location / {
            root   /var/www/nextcloud;
            index  index.php index.html index.htm;

        # WordPress permalinks configuration
        try_files $uri $uri/ /index.php?$args;
        }


# php-parsing
        location ~ .php$ {
	root	/var/www/nextcloud;
	try_files $uri =404;
	fastcgi_pass	unix:/var/run/php/php7.4-fpm.sock;
	fastcgi_index  index.php;
	fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
	include	fastcgi_params;
	fastcgi_buffer_size 128k;
	fastcgi_read_timeout 150;
	fastcgi_buffers 256 4k;
	fastcgi_busy_buffers_size 256k;
	fastcgi_temp_file_write_size 256k;
	}
}

Jika sudah, silakan save dan restart nginx nya

service nginx restart

Sekarang silakan di cek di Qualys SSL Labs Test untuk mengecek hasilnya dan mendapatkan nilai berapa

https://www.ssllabs.com/ssltest/

Berikut hasil dari salah 1 web saya yang sudah mendapat nilai A+

SSL Result

Mungkin cukup sekian, semoga bermanfaat

4 comments

    1. Bisa dicoba disable beberapa cipher yang weak, dan gunakan cipher yang trust saja, seperti berikut

      ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;

      Lalu disable TLS 1.0 dan 1.1, dan hanya aktifkan TLS 1.2 saja

  1. Mas bisa tolong dijelaskan perlahan masing-masing letak confignya? karena saya baru belajar, webserver nginx masih default & tidak menggunakan blok server.

    mau memasukkan data-data diatas masih bingung ditulis dikonfig yg mana

    1. nginx defaultnya seinget saya tetap pakai virtualhost, ada di file /etc/nginx/sites-available/default, bisa dibuat saja 1 virtualhost baru di dalam directory /etc/nginx/sites-available, kemudian symlink file tersebut ke /etc/nginx/sites-enabled/

Leave a Reply

Your email address will not be published. Required fields are marked *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

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