Tutorial: Seting SSL pada Blog Gitlab

6 menit saja |

Baiklah, saya buatkan tutorial SSL untuk blog yang diletakkan di hosting gitlab. Sekaligus ini adalah tutorial pertama kalinya yang saya tulis di blog baru migrasi ini.

Pengantar

Setiap tutorial, akan dibuatkan seperti ini.. ada TOC (Table of Content) nya yang berada di pojok kanan atas. Inilah kenapa saya suka pake jekyll dengan themes ini. Memudahkan tulisan tutorial dibuat dengan rapi.

Siapa tahu jadi pada ikutan tertarik, dan ikutan membuatnya. Jadilah makin bermanfaat blog saya ini hehe.

Seputar SSL

Katanya SSL tidak diperlukan untuk web static semacam ini. Kenapa? Karena tidak ada data yang di posting. Hmm, may be..

Terlepas efektifitasnya, tapi saya sering butuhkan terkait isu pembuatan bot. Yang misalnya buat bikin bot di LINE mewajibkan url resource data harus berupa SSL. Juga bot di Telegram, dan webhook-webhook service lainnya. Nah, jadi tetap diperlukan.

Selebihnya, tentu sesuai kebutuhan masing-masing.

Apa itu SSL?

Google saja pakai keyword apa itu ssl atau ssl adalah akan menemukan banyak sekali penjelasan. Jadi sepertinya saya gak perlu bahas lagi secara panjang kali lebar kali tinggi yak.

Intinya SSL yang merupakan kepanjangan Secure Socket Layer adalah layer protokol yang lebih aman lalu lintasnya. Karena data yang diproses akan di enkrip terlebih dahulu. Bagi para pencuri data jaringan, minimal akan mengalami kesulitan karena adanya data yang tidak kasat mata bisa langsung diterjemahkan.

Kalau untuk website semacam blog ini jelas gak penting. Tapi kalau implementasinya ada pada kerahasiaan data biar tidak bocor, seperti password atau sejenisnya. Atau bahkan data sensitif seperti keuangan pada situs perbankan, tentu saja menjadi sangat penting sekali. Karena keamanan berbanding dengan kepercayaannya.

Selain faktor keamanan, SSL juga merupakan identitas keotentikan sebuah website. Biasanya menyimpan data-data penting yang merupakan benar penerbit (issuer) nya dari lembaga terkait.

Udah gitu aja, nanti malah jadi makin panjang.

Penyedia SSL bersertifikat

Ada banyak penyedianya, secara umum harus bayar. Seperti verisign, comodo, network solution, symantec, digicert, geotrust, dan lain sebagainya.

Nah, buat kita-kita niy yang hobi gratisan.. alhamdulillah, ada penyedianya. yakni letsencrypt.

Senang sekali rasanya, coba kalau harus dipaksa bayar juga. Jadi susah belajarnya hehe..

Nah, pada tutorial kali ini ya kita belajar tentang cara install SSL tersebut.

Hosting: Github vs Gitlab

Masih seputar hosting blog, karena blog ini memakai jasa kedua penyedia Github dan Gitlab jadilah ini lanjutan postingan sebelumnya.

Pada Github tidak disediakan fasilitas SSL manual domain. Begitu juga kalau hosting pakai openshift harus berbayar baru bisa pakai SSL bersertifikatnya.

Gitlab menjadi istimewa, karena mengizinkan kita mengunggah sendiri sertifikat SSL sehingga bisa lah web ini memakai protocol https.

Lets Encrypt!

Yoa, mari kita mulai.

Tidak ada registrasi pada umumnya kayak menuliskan nama, alamat, email, konfirmasi email, dan sebagainya untuk mendaftar ke letsencrypt. Itu yang bikin tambah suka hehe..

Sebenarnya ada teknik bermacam-macam, atau trik tepatnya jika kasusnya berbeda. Seperti untuk blog gitlab kayak ini. Atau pakai apache, atau nginx. Di Linux, Windows. Dan lainnya.

Tapi kita fokuskan kali ini buat gitlab aja.

Secara umum caranya bisa dilihat pada situs pages gitlab ini. Tapi pas saya praktekkan, adaaa aja kendalanya.

Alhasil, ya ditulisan inilah akhirnya dibahas.

O iya, di sini saya pakai linux. Karena memang soal urusan begini-begini linux lebih nyaman dibanding Windows. Maaf yak pengguna Windows. Tanpa mengurangi rasa hormat saya, tetap saya lanjutkan tutorial ini pakai linux, hehe..

Clone proyek letsencrypt

Pertama, clone proyek letsencrypt yang ada di github. Kemudian masuk ke folder hasil clone-nya.

$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt

Jalankan letsencrypt-auto

Selanjutnya kita akan pakai ./letsencrypt-auto untuk membuat sertifikat SSL nya. Caranya, sesuaikan YOURDOMAIN.org dengan domain blogmu. Cara ini harus pake mode manual untuk mendapatkan certifikat. Tidak bisa pakai mode auto karena kita gak punya akses secara langsung ke server dongkernya gitlab.

Jadi seperti ini kira-kira:

$ ./letsencrypt-auto certonly -a manual -d YOURDOMAIN.org
#
# If you want to support another domain, www.YOURDOMAIN.org, for example, you
# can add it to the domain list after -d like:
# ./letsencrypt-auto certonly -a manual -d YOURDOMAIN.org www.YOURDOMAIN.org
#

Sesudah itu IP kita akan dicatat ke servernya letsencrypt, dan mendapatkan respon untuk diikuti langkah berikutnya seperti ini:

Make sure your web server displays the following content at
http://YOURDOMAIN.org/.well-known/acme-challenge/5TBu788fW0tQ5EOwZMdu1Gv3e9C33gxjV58hVtWTbDM
before continuing:

5TBu788fW0tQ5EOwZMdu1Gv3e9C33gxjV58hVtWTbDM.ewlbSYgvIxVOqiP1lD2zeDKWBGEZMRfO_4kJyLRP_4U

#
# output omitted
#

Press ENTER to continue

OK STOP sampai di sini. Jangan buru-buru tekan ENTER, karena kalau tekan ENTER akan dilakukan verifikasi domain.

Petunjuk di atas memberi tahu bahwa :

  • Buatlah sebuah file pada di folder .well-known/acme-challenge/
  • Nama filenya adalah 5TBu788fW0tQ5EOwZMdu1Gv3e9C33gxjV58hVtWTbDM
  • Isi filenya 5TBu788fW0tQ5EOwZMdu1Gv3e9C33gxjV58hVtWTbDM.ewlbSYgvIxVOqiP1lD2zeDKWBGEZMRfO_4kJyLRP_4U

Jelaskan? Mari kita lakukan pada server gitlab dengan enginenya si jekyll

Pages Lets Encrypt HTML

Langkah pertama, buat file untuk halaman verifikasi lets encrypt. Misalnya kasih nama aja letsencrypt.html.

Nah, di sini saya sempat muter-muter salah.. karena penamaan saya pakai file markdown .md atau .markdown menyebabkan ada tag <p></p>, yang kemudian gagal pas diverifikasi. Maka, pastikan ekstensi yang dibuat adalah .html

Isikan kira-kira seperti ini :

---
layout: null
permalink: /.well-known/acme-challenge/5TBu788fW0tQ5EOwZMdu1Gv3e9C33gxjV58hVtWTbDM/
---
5TBu788fW0tQ5EOwZMdu1Gv3e9C33gxjV58hVtWTbDM.ewlbSYgvIxVOqiP1lD2zeDKWBGEZMRfO_4kJyLRP_4U

Perhatikan: bagian akhir permalink adalah tanda slash /. Gara-gara ini pula saya muter-muter gak terverifikasi.

Untuk mengetesnya, jalankan si jekyll di local :

$ jekyll serve

Kemudian coba diakses: http://localhost:4000/.well-known/acme-challenge/5TBu788fW0tQ5EOwZMdu1Gv3e9C33gxjV58hVtWTbDM

Yang hasilnya seharusnya adalah seperti isinya diatas 5TBu788fW0tQ5EOwZMdu1Gv3e9C33gxjV58hVtWTbDM.ewlbSYgvIxVOqiP1lD2zeDKWBGEZMRfO_4kJyLRP_4U.

Jika demikian, beres..

Tapi jika keluar error 404 alias halaman tidak ditemukan, coba diamati dengan teliti kembali masalahnya dimana. Ya, intinya harus bisa diakses halamannya. Kalau tetap bingung, tanya saja di komentar tutorial ini hehe.

Push ke Gitlab

Selanjutnya tentu saja di push ke gitlab :

$ git add .
$ git commit -am 'yuk di SSL in'
$ git push

Kemudian pastikan sama kayak langkah di atas, akses langsung ke blog jadinya http://YOURDOMAIN.org/.well-known/acme-challenge/5TBu788fW0tQ5EOwZMdu1Gv3e9C33gxjV58hVtWTbDM/

Kalau sudah OKE semua, enggak keluar 404.. Mari kembali ke langkah yang sempat terhenti dengan meminta tekan ENTER diatas.

Verifikasi

Pada halaman sebelumnya:

Press ENTER to continue

Tekan ENTER, biarlah proses berlangsung otomatis. Jika sukses maka akan muncul kira-kira seperti ini diakhir dialognya.

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/YOURDOMAIN.org/fullchain.pem. Your cert will
   expire on 2016-07-04. To obtain a new version of the certificate in
   the future, simply run Let's Encrypt again.
 - If you like Let's Encrypt, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Gitlab Pages

Selanjutnya masuk di halaman gitlab bagian Settings -> Pages*

Di sana kita tambahkan kembali domain yang barusan kita serfikasi. Hapus aja yang lama, dan isi kembali.

Buka file dibawah ini (pakai sudo aksesnya) :

/etc/letsencrypt/live/YOURDOMAIN.org/fullchain.pem masukkan di bagian kolom Certificate (PEM)

dan

/etc/letsencrypt/live/YOURDOMAIN.org/privkey.pem dimasukkan di kolom Key (PEM)

lets encrypt di gitlab

Ngetestnya gambang, pake curl saja lah:

$ curl -vX HEAD https://YOURDOMAIN.org/
#
# starting connection
#
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
* Server certificate: YOURDOMAIN.org
* Server certificate: Lets Encrypt Authority X3
* Server certificate: DST Root CA X3

Ambil headernya web, artinya itu sudah ter-encrypt pakai letsencrypt.

Contoh realnya ya blog ini https://blog.banghasan.com

Horaaay!


Resume

Resume langkah-langkah SSL untuk Gitlab.

1. Clone LetsEncrypt

$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt

2. Jalankan letsencrypt-auto

$ ./letsencrypt-auto certonly -a manual -d YOURDOMAIN.org

Biarkan sampai Press ENTER to continue.

3. Buat page jekyll

---
layout: null
permalink: /.well-known/acme-challenge/5TBu788fW0tQ5EOwZMdu1Gv3e9C33gxjV58hVtWTbDM/
---
5TBu788fW0tQ5EOwZMdu1Gv3e9C33gxjV58hVtWTbDM.ewlbSYgvIxVOqiP1lD2zeDKWBGEZMRfO_4kJyLRP_4U

4. Verifikasi

Tekan ENTER pada langkah ke-2.

5. CNAME Domain

Di gitlab menuju setingan pages domain: Settings -> Pages kemudian buat new domain isikan :

Certificate (PEM) dari /etc/letsencrypt/live/YOURDOMAIN.org/fullchain.pem

Key (PEM) dari /etc/letsencrypt/live/YOURDOMAIN.org/privkey.pem

Selesai

Silakan komentar jika bingung atau memberikan sambutan pada tutorial ini :-)