Cara install Let’s Encrypt di Nginx (score A+)

By | August 19, 2018

Panduan cara install sertifikat SSL Let’s Encrypt di Nginx web server dengan score A+ uji coba menggunakan SSLLabs Test. Di panduan ini operasi program yang digunakan ialah Linux Ubuntu 18 dan CentOS 7, bagi OS lain silahkan disesuaikan.

Jikalau Sahabat belum menginstall Nginx, ikuti langkah awal berikut, jikalau telah seketika saja ke tahap berikutnya, Install Let’s Encrypt.

INFO: Pastikan domain telah terhubung ke server

Install Nginx di Ubuntu dan CentOS

Di bawah ini secara singkat panduan instalasi Nginx dengan opsi distro Linux yang Sahabat gunakan, bagi panduan komprehensif silahkan baca panduan sebelumnya:

Keterangan:

Instalasi Nginx di panduan ini, lokasi direktori web root masih menggunakan konfigurasi bawaan yaitu:

  • Di Ubuntu /var/www/html
  • Di CentOS /usr/share/nginx/html
  • Domain selaku contoh idnetter.com, silahkan diganti.

Jadi harap diperhatikan ketika Sahabat copy-paste setiap konfigurasi, jikalau tak valid, karenanya proses generate sertifikat gagal!.

Instalasi Nginx bagi Ubuntu

apt update -y  apt install nginx -y
systemctl start nginx
systemctl enable nginx

Jikalau Sahabat mengaktifkan Firewall di Ubuntu pastikan bagi mengizinkan port 80 dan 443, jikalau tak lewati langkah ini.

ufw allow 80
ufw allow 443

Instalasi Nginx bagi CentOS

yum install epel-release nginx -y
systemctl start nginx
systemctl enable nginx

Secara default CentOS versi terbaru firewallnya aktif, Sahabat dapat menonaktifkan firewallD dengan command systemctl stop firewalld systemctl disable firewalld. Namun jikalau tetap ingin mengaktifkan firewall-cmd pastikan bagi mengizinkan trafik http dan https.

firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent

Install Let’s Encrypt

Alternatif instalasi Let’s Encrypt bagi distro Linux Ubuntu dan CentOS

Instalasi Let’s Encrypt bagi Ubuntu

apt install letsencrypt -y

Kemudian bikin file konfigurasi baru yaitu certbot.conf dengan nano teks editor.

nano /etc/nginx/snippets/certbot.conf

Isi konfigurasi seperti dibawah ini.

location /.well-known {
alias /var/www/html/.well-known;
}

Berikutnya buka konfigurasi default Nginx

nano /etc/nginx/sites-available/default

Tambahkan baris berikut ke pada blok atau kolom server

include /etc/nginx/snippets/certbot.conf

Contoh:

server {
    listen *:80;
    server_name idnetter.com www.idnetter.com;
    include /etc/nginx/snippets/certbot.conf;
    ...
    ...
}

Simpan

Instalasi Let’s Encrypt bagi CentOS

yum install cerbot -y

Bikin konfig tambahan di /etc/nginx/default.d/

nano /etc/nginx/default.d/certbot.conf

Paste konfig ini

location /.well-known {
    alias /usr/share/nginx/html/.well-known;
}

Lalu, buka konfigurasi default Nginx

nano /etc/nginx/conf.d/default

Jikalau tak ada

nano /etc/nginx/nginx.conf

Tambahkan baris berikut ke pada kolom server

include /etc/nginx/default.d/certbot.conf

Contoh:

server {
    listen *:80;
    server_name idnetter.com www.idnetter.com;
    include /etc/nginx/default.d/certbot.conf;
    ...
    ...
}

Simpan

Membangun sertifikat SSL Let’s Encrypt

Kita akan membangun sertifikat Let’s Encrypt dengan menggunakan command certbot

certbot certonly --rsa-key-size 4096 --webroot --agree-tos --no-eff-email --email man@idnetter.com -w /var/www/html -d idnetter.com -d www.idnetter.com

Berikutnya, kita akan membangun pun sekuriti tambahan yakni dengan cara meng-generate dhparam key 4098-bit di pada direktori /etc/nginx/ dengan opsi dsaparam agar prosesnya cepat.

openssl dhparam -dsaparam -out /etc/nginx/dhparam.pem 4096

Langkah berikutnya konfigurasi SSL

Konfigurasi SSL

Bikin file konfigurasi SSL

Bagi Ubuntu

nano /etc/nginx/snippets/ssl.conf

Bagi CentOS

nano /etc/nginx/defaut.d/ssl.conf

Isi dengan konten berikut.

Ada 3 chipersuites yakni rekomedasi dari chiperli, Mozilla dan VestaCP, saya menggunakan Vesta. jangan lupa ganti domain idnetter.com.

# Versi TLS
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;

# Rekomendasi chiperli
# Gunakan chipersuites ini bagi memperoleh poin 100 di SSLLabs Test
# Tetapi tak support bagi beberapa device
#ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;

# Rekomendasi Mozilla
# Mungkin akan support lebih banyak device
# tapi setelah saya coba laman saya tak dapat dibuka di device lama seperti Android kitkat ke bawah.
#ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';

# VestaCP
# ini yang saya gunakan, saya mengambil konfigurasi punya VestaCP, banyak device yang support
# meskipun mungkin tak support di IE 8 windows XP (keterangan di SSLLabs, belum tahu faktanya)
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4;

# DHPARAM key dan ECDH curve >= 256bit
ssl_dhparam /etc/nginx/dhparam.pem;
ssl_ecdh_curve secp384r1;

server_tokens off;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;

# Mengaktifkan OSCP Stapling for Nginx web server
# Gunakan sertifikat chain.pem bagi SSL Letsencrypt
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;

# Proteksi XSS
add_header X-Frame-Options SAMEORIGIN;
add_header X-XSS-Protection 1; mode=block;
add_header X-Content-Type-Options nosniff;
# Mengaktifkan HTTP Strict-Transport-Security
# Jikalau SSLnya diaplikasikan pun bagi subdomain
# pastikan bagi menghapus opsi 'includeSubdomainsl; preload', jikalau tak kemungkinan subdomain tak akan dapat diakses.
add_header Strict-Transport-Security max-age=63072000; includeSubdomains; preload;

Konfigurasi Nginx dengan SSL

Buka file konfigurasi server block Nginx, di CentOS biasanya letaknya di /etc/nginx/conf.d/default sedangkan Ubuntu di /etc/nginx/sites-available/default , ganti dengan konfigurasi berikut ini

Perhatian! seluruh trafik http saya redirect permanen ke protokol https.

  • Ubah server_name idnetter.com www.idnetter.com; sesuai domain Sahabat
  • Ubah fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; sesuai versi PHP yang Sahabat gunakan.
  • Ubah web root /var/www/html sesuaikan
  • Jikalau Sahabat memakai CentOS, ubah /etc/nginx/snippets/ssl.conf; menjadi /etc/nginx/default.d/ssl.conf;

server {
listen *:80;
#listen [::]:80;
server_name idnetter.com www.idnetter.com;
return 301 https://$server_name$request_uri;
}

server {
listen *:443 ssl http2;
#listen [::]:443 ssl http2;
server_name idnetter.com www.idnetter.com;

# Deprecated kalau gunakan http2
# ssl on;
ssl_certificate /etc/letsencrypt/live/idnetter.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/idnetter.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/idnetter.com/chain.pem;

# Konfigurasi SSL
include /etc/nginx/snippets/ssl.conf;

location /.well-known {
allow all;
}

root /var/www/html/;
index index.htm index.html index.php;

location / {
try_files $uri $uri/ /index.php?$args;
}

access_log /var/log/nginx/access_log;
access_log off;
error_log /var/log/nginx/error_log error;

error_page 403 = 404;
location /. { access_log off; log_not_found off; deny all; }
location $ { access_log off; log_not_found off; deny all; }
location = /robots.txt { access_log off; log_not_found off; }
location = /favicon.ico { access_log off; log_not_found off; }

# Mengaktifkan Kompresi gzip
gzip on;
gzip_comp_level 9;
gzip_min_length 256;
gzip_proxied any;
gzip_vary on;
gzip_disable MSIE [1-6].;

gzip_types text/plain text/css text/javascript text/js text/xml application/json application/javascript application/x-javascript application/xml application/xml+rss application/x-font-ttf image/svg+xml font/opentype;

# Caching
location * .(jpg|jpeg|gif|css|png|js|ico|html)$ { access_log off; expires max; }
location * .(woff|svg)$ { access_log off; log_not_found off; expires 30d; }
location * .(js)$ { access_log off; log_not_found off; expires 7d; add_header Cache-Control public, no-transform; }

# PHP
location .php?$ {
try_files $uri = 404;
include fastcgi_params;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
fastcgi_split_path_info ^(.+.php)(.*)$;
# Menyembuyikan informasi versi
fastcgi_hide_header X-Powered-By;
}
}

Cek konfigurasi Nginx

nginx -t

Jikalau keterangannya telah OK, restart Nginx

systemctl restart nginx

Uji Coba

Waktunya uji coba dengan SSLLabs Test, hasilnya harusnya A+ seperti idnetter.com berikut ini saya sertakan screenshotnya

Cara install Let’s Encrypt di Nginx (score A+)

 

Selamat mencoba, semoga berhasil A+ pun.

Jikalau Sahabat ingin memperoleh score A+ tanpa repot dan kuatir situs Sahabat down, jangan ragu bagi kontak saya di 0812 3500 8433 via WA bagi order jasa install SSL dengan score terbaik.

Update: 25 Februari 2019


Sumber https://idnetter.com