How To Secure Website using free SSL with Let’s Encrypt

Introduction

Tutorial ini akan menunjukkan cara untuk mengatur sertifikat TLS / SSL pada Debian 8 server yang menjalankan Nginx sebagai forwarder webserver. Artikel ini juga akan menjelaskan bagaimana  mengotomatisasi proses perpanjangan sertifikat menggunakan cron job.

Sertifikat SSL digunakan dalam webserver untuk mengenkripsi lalu lintas antara server dan client, memberikan keamanan ekstra bagi pengguna untuk mengakses aplikasi. Artikel ini akan menjelaskan cara mudah untuk mendapatkan dan menginstal sertifikat terpercaya secara gratis.

Prerequisites

Dalam rangka untuk menyelesaikan panduan ini, Anda akan perlu :

  • Debian 8 server dengan non-root sudo user
  • Nginx sebagai server Proxy/forwarder.
  • Apache sebagai webserver.
  • WordPress sebagai aplikasi cms

Step 1 — Install Let’s Encrypt Client

Let’s encrypt menyediakan berbagai cara untuk menginstall, dalam artikel ini akan menjelaskan cara install yang paling mudah yaitu dengan mengclone dari repositorynya let’s encrypt, lakukan cara seperti dibawah ini :

$ sudo apt-install git
$ cd /opt
$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt
$ ./letsencrypt-auto certonly --manual -d widianto.org -d www.widianto.org

Dalam menjalankan perintah diatas akan menghasilkan dua hal yaitu :

  1. kode validasi, kode ini diperlukan untuk validasi bahwa ssl yang digenerate benar untuk domain widianto.org
  2. File cert .pem, file yang dibutuhkan oleh nginx, yg disimpan di /etc/letsencrypt/live/, dari 5 files di atas, hanya dua files yang dibutuhkan oleh nginx yaitu fullchain2.pem dan privkey2.pem

Step 2 — Configure Vhost Nginx

Ada dua hal yang akan dikonfigurasi di vhost nginx yaitu konfigurasi :

[1] Kode Validasi, kode validasi akan didapat saat anda menjalankan perintah diatas, tampilannya kurang lebih seperti ini :

=========================================================================

Make sure your web server displays the following content at
http://widianto.org/.well-known/acme-challenge/0yrmsg00ZoTN4-sif0ahtNmEs85nAEw4Eu6P9r79lZk before continuing:

0yrmsg00ZoTN4-sif0ahtNmEs85nAEw4Eu6P9r79lZk.4c6Dt_ds9cv8qL-8Vs47I8zsNjtU4JhyQeQV_zuxzmw

If you don’t have HTTP server configured, you can run the following
command on the target server (as root):

========================================================================

Yang perlu anda perhatikan adalah baris warna merah, itu adalah kode validasi yang akan di cek oleh letsencrypt, Kemudian tambahkan  di vhost nginx, seperti dibawah ini :

    location /.well-known/acme-challenge/0yrmsg00ZoTN4-sif0ahtNmEs85nAEw4Eu6P9r79lZk {
        add_header Content-Type text/plain;
        return 200 "0yrmsg00ZoTN4-sif0ahtNmEs85nAEw4Eu6P9r79lZk.4c6Dt_ds9cv8qL-8Vs47I8zsNjtU4JhyQeQV_zuxzmw";
        }

[2] File cert .pem, file yang dibutuhkan oleh nginx, yg disimpan di /etc/letsencrypt/live/, dari 5 files di atas, hanya dua files yang dibutuhkan oleh nginx yaitu fullchain2.pem dan privkey2.pem

ssl on;
ssl_certificate /etc/letsencrypt/live/jamparing-asih.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/jamparing-asih.com/privkey.pem;

Script vhost lengkapnya seperti dibawah ini :

upstream www.widianto.org {
    server 172.16.10.11;
}
server {
    listen      80;
    server_name widianto.org www.widianto.org;
    return 301 https://widianto.org$request_uri;
}
server {
    listen	443;
    server_name www.widianto.org;
    ssl on;
    ssl_certificate     /etc/letsencrypt/live/widianto.org/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/widianto.org/privkey.pem;
    return 301 https://widianto.org$request_uri;
}
server {
    	listen      443;
    	server_name widianto.org;
    	access_log  /var/log/nginx/widian.top/access.log;
    	error_log   /var/log/nginx/widian.top/error.log;
    	ssl on;
    	ssl_certificate     /etc/letsencrypt/live/widianto.org/fullchain.pem;
    	ssl_certificate_key /etc/letsencrypt/live/widianto.org/privkey.pem;
	add_header Strict-Transport-Security "max-age=31536000";
	location /.well-known/acme-challenge/0yrmsg00ZoTN4-sif0ahtNmEs85nAEw4Eu6P9r79lZk {
		add_header Content-Type text/plain;
		return 200 "0yrmsg00ZoTN4-sif0ahtNmEs85nAEw4Eu6P9r79lZk.4c6Dt_ds9cv8qL-8Vs47I8zsNjtU4JhyQeQV_zuxzmw";
		}
    location /stats {
          stub_status on;
          access_log   off;
        }
    location / {
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_redirect off;
        proxy_set_header    Host            $host;
        proxy_set_header    X-Real-IP       $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header    X-Forwarded-Proto https;
	proxy_pass  http://www.widianto.org;
    }
}

Kemudian agar hasil konfigurasi mengalami perubahan, jangan lupa untuk me-reload nginx.

$ nginx -t
$ service nginx reload

Step 3 — Setup Auto renewal

Let’s Encrypt berlaku selama 90 hari, tapi disarankan agar memperbarui sertifikat setiap 60 hari untuk memungkinkan margin kesalahan. dan Let’s Encrypt memiliki script yang secara otomatis memeriksa sertifikat dan akan memperbaharui  jika kadaluarsa sertifikat kurang dari 30 hari.

Untuk kebutuhan ini maka diperlukan script otomatis yang akan dijalankan setiap minggu, lakukan perintah seperti dibawah ini :

$ crontab-e

Lalu masukan script seperti dibawah ini :

30 2 * * 1 /opt/letsencrypt/certbot-auto renew >> /var/log/le-renew.log

save & exit. Ini akan membuat tugas cron baru yang akan mengeksekusi letsencrypt-auto renew perintah setiap Senin pukul 2:30 am. Output yang dihasilkan oleh perintah akan disalurkan ke file log yang terletak di /var/log/le-renewal.log.

Please follow and like us:
0

Leave a Reply

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