Tutorial SSL Gratis Let’s Encrypt di Ubuntu 16.04 + Nginx (Digitalocean)

SSL Security

Sebelum melakukan langkah di bawah ini pastikan situs Anda sudah bisa diakses lewat http, jika belum bisa cara mengaturnya bisa ikuti panduan Konfigurasi LEMP (Linux Ubuntu 16.04 + Nginx + MySQL 5.7 + PHP 7)

1. Install Let’s Encrypt

Langkah ini hanya perlu dilakukan 1x untuk tiap server/droplet. Jika anda sudah pernah memasang sertifikat ssl dan ingin memasang sertifikat untuk domain lain, langkah ini bisa dilewati.

Update package list

apt-get update

Install Let’s encrypt

apt-get install letsencrypt

2. Generate SSL Certificate

letsencrypt certonly -a webroot --webroot-path=/var/www/www.kenc0ur.com -d kenc0ur.com -d www.kenc0ur.com

* ganti /var/www/www.kenc0ur.com dengan path root domain anda
* ganti kenc0ur.com dan www.kenc0ur.com dengan domain anda
* Setelah berhasil maka akan muncul pemberitahuan seperti di bawah ini, catat folder sertifikat sslnya.

Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/kenc0ur.com/fullchain.pem. Your cert will
expire on 2017-05-09. To obtain a new version of the certificate in
the future, simply run Let’s Encrypt again.

Catat folder sertificat ssl tersebut

3. Generate Diffie-Hellman parameter for DHE ciphersuites

Langkah ini hanya perlu dilakukan 1x untuk tiap server/droplet. Jika anda sudah pernah menggenerate Diffie-Hellman parameter sebelumnya, langkah ini bisa dilewati.

openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

* Proses ini butuh waktu beberapa menit, tunggu saja

4. Edit Virtual Host

nano /etc/nginx/sites-available/www.kenc0ur.com

* ganti www.kenc0ur.com sesuai dengan file v-host yang kamu buat sebelumnya

ganti port 80 menjadi 443 ssl http2.
Sebelumnya:

listen 80;
listen [::]:80;

Ganti menjadi:

listen 443 ssl http2;
listen [::]:443 ssl http2;

tambahkan kode ini di luar bracket server:

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

Tambahkan kode ini di dalam braket server utama:

ssl_certificate /etc/letsencrypt/live/kenc0ur.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/kenc0ur.com/privkey.pem;
ssl_dhparam  /etc/ssl/certs/dhparam.pem;

* ganti /etc/letsencrypt/live/kenc0ur.com/ sesuai dengan folder ssl certificate yang keluar di langkah 2

Secara keseluruhan, lihat perbandingan kedua v-host dibawah ini, sebelum dan sesudah diedit.

Sebelum diedit:

server {
	server_name  kenc0ur.com;
	rewrite ^(.*) http://www.kenc0ur.com$1 permanent;
}

server {
	server_name www.kenc0ur.com;
	listen 80;
	listen [::]:80;
	root /var/www/www.kenc0ur.com;
	index index.html index.htm index.nginx-debian.html index.php;
	location / {
		try_files $uri $uri/ /index.php?q=$uri&$args;
	}

	location ~ \.php$ {
		include /etc/nginx/fastcgi_params;
		include snippets/fastcgi-php.conf;
		fastcgi_buffers 8 256k;
		fastcgi_buffer_size 128k;
		fastcgi_intercept_errors on;
		include fastcgi_params;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		fastcgi_pass unix:/run/php/php7.0-fpm.sock;
	}

	location ~* \.(css|js|png|jpg|jpeg|gif|ico)$ {
		expires 1w;
	}

	location ~ /\.ht {
	  deny all;
	 }
}

Sesudah diedit (lihat baris yang ditandai untuk melihat bagian yang telah diedit)

server {
	server_name  kenc0ur.com;
	rewrite ^(.*) http://www.kenc0ur.com$1 permanent;
}

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

server {
	server_name www.kenc0ur.com;
	listen 443 ssl http2;
	listen [::]:443 ssl http2;
	ssl_certificate /etc/letsencrypt/live/kenc0ur.com/fullchain.pem;
	ssl_certificate_key /etc/letsencrypt/live/kenc0ur.com/privkey.pem;
	ssl_dhparam  /etc/ssl/certs/dhparam.pem;
	root /var/www/www.kenc0ur.com;
	index index.html index.htm index.nginx-debian.html index.php;
	location / {
		try_files $uri $uri/ /index.php?q=$uri&$args;
	}

	location ~ \.php$ {
		include /etc/nginx/fastcgi_params;
		include snippets/fastcgi-php.conf;
		fastcgi_buffers 8 256k;
		fastcgi_buffer_size 128k;
		fastcgi_intercept_errors on;
		include fastcgi_params;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		fastcgi_pass unix:/run/php/php7.0-fpm.sock;
	}

	location ~* \.(css|js|png|jpg|jpeg|gif|ico)$ {
		expires 1w;
	}

	location ~ /\.ht {
	  deny all;
	 }
}

5. Edit File nginx.conf

nano /etc/nginx/nginx.conf

Cari code ssl_prefer_server_ciphers on; lalu tambahkan code ini di bawahnya:

ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_session_cache shared:SSL:5m;
ssl_session_timeout 1h;

6. Retart Nginx

service nginx restart