Cara Pasang SSL Let’s Encrypt di VPS Nginx, Debian Jessie / Strecth

Tanya

Saya mau install SSL di web saya. Domainnya example.com. Saya ingin agar nanti domain saya itu bisa diakses pake HTTPS (https://example.com), itu gimana ya caranya? VPS saya unamanaged, OS nya Debian 9 dan sdh saya install Nginx, PHP-FPM dan MariaDB Server.

Jawaban

Pernah mendengar tentang SSL?

Kalo kita ibaratkan, web yang tanpa SSL, itu ibarat kita naek motor ga pake helm, ke wilayah yang banyak debunya. Apa yang terjadi? Mata kita kelilipan, wajah kita akan dipenuhi debu. Pas kita jatuh, kepala kena batu, berdarah. Sedangkan web yang pake SSL itu seolah kita pake helm full face, jadi mau ada debu pun mata aman ngga kelilipan.

Sedangkan penerapannya ke web, SSL itu berfungsi menciptakan jalur komunikasi yang aman antara penugnjung dengan web mas. Misal nih, web mas itu ada form2 submit data sensitif, kayak form contact, form order (ada password, email, dll).

Contoh real nya misal mas punya toko online. Kalo misal, ada pengunjung yang nge wifi di cafe, dia order barang dari web mas, dan di cafe itu ada hacker, maka data yang diinput penugnjung ke web mas akan direkam hacker. Ujung2 nya ada pihak yang dirugikan.

Nah disinilah SSL itu berperan. Kalo web nya dipasang SSL, data yang diinput ke web mas, tdk akan terbaca hacker.

Pengertian SSL simpel nya seperti itu.

Supaya web nya bisa diakses pake format HTTPS, maka kita perlu mengaktifkan SSL di server nya. Cara mengaktifkannya yaitu dengan menyimpan 2 buah file, file Certificate dan file Private Key. Certificate ini biasa dijual oleh penerbit Certificate kayak Comodo, GeoTrust, VeriSign, dll. Private key nya kita yang hrs siapakan. Kalo yang ingin gratis, ngga mau repot, maka bisa menggunakan SSL Cloudflare, atau Let’s Encrypt.

Materi kali ini adalah setting SSL gratis dari Let’s Encrypt. Certificate dan Private Key nya di-generate otomatis.

Langsung aja. Yang dibutuhkan adalah 1 buah server dengan OS Debian 8 atau nama lainnya Jessie, atau Debian 9 atau nama lainnya Debian Stretch, dan Webserver Nginx. Praktek kali ini saya contohkan di Debian Stretch (atau Debian 9)

Untuk memastikan OS nya Debian apa (Stretch apa Jessie) , jalankan perintah ini

lsb_release -a

Hasilnya Kalo Jessie

Hasilnya kalo Stretch

Kalo misal tulisannya Debian 10, JANGAN ikuti materi ini, silahkan ke materi ini.

Sedangkan untuk mengetahui apakah pake Nginx, jalankan perintah

netstat -ptuln

Hasilnya

Setelah memiliki tampilan sama (ada tulisan “nginx” dan “80”), baru ke proses instalasi SSL.

Instalasi SSL Let’s Encrypt

Kita akan memanfaatkan aplikasi bernama Certbot untuk proses penerbitan SSL, maka install dulu si certbot nya. Instalasi Certbot ini hanya diperlukan sekali seumur hidup di server itu jangan dijalankan 2x, 3x dst. 1x cukup.

Add certbot dulu ke sources.list

Ingat, jalankan 1x aja!

Kalo Debian Jessie, perintahnya

echo 'deb http://deb.debian.org/debian jessie-backports main contrib non-free' >> /etc/apt/sources.list
echo 'deb-src http://deb.debian.org/debian jessie-backports main contrib non-free' >> /etc/apt/sources.list

Kalo Debian Stretch, perintahnya

echo 'deb http://deb.debian.org/debian stretch-backports main contrib non-free' >> /etc/apt/sources.list
echo 'deb-src http://deb.debian.org/debian stretch-backports main contrib non-free' >> /etc/apt/sources.list

Lalu jalankan

apt-get update

Kalo Debian Jessie lanjut dengan menjalankan

apt-get install python-certbot-nginx -t jessie-backports  -y

Kalo Debian Stretch lanjut dengan menjalankan

apt-get install python-certbot-nginx -t stretch-backports  -y

Perintah di atas, dilakukan sekali seumur hidup aja. Jangan diulang berulang-ulang ya.

Sampe proses di atas, proses instalasi cerbot selesai. Sekarang lanjut ke proses pemasangan SSL.

Pemasangan SSL

Untuk domain example.com yang ingin dipasang SSL / HTTPS, silahkan jalankan perintah ini, kalo domainnya bukan example.com, silahkan sesuaikan

Untuk Debian Stretch (9)

Kalo OS Anda Debian Stercth / Debian 9, perintahnya adalah sbb:

certbot \
     --redirect \
     --agree-tos \
     --register-unsafely-without-email \
     --nginx \
     -d example.com -d www.example.com

Tunggu proses nya sampe nanti melihat tampilan yang seperti ini

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for example.com
http-01 challenge for www.example.com
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/example.com
Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/example.com
Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/example.com
Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/example.com

-------------------------------------------------------------------------------
Congratulations! You have successfully enabled https://example.com and
https://www.example.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=example.com
https://www.ssllabs.com/ssltest/analyze.html?d=www.example.com
-------------------------------------------------------------------------------

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   Your cert will expire on 2018-08-03. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

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

Done. SSL sdh terpasang di domain, silahkan akses web nya, harusnya sdh ter-redirect. Clear cache / refresh dulu browser nya kalo belum HTTPS.

Untuk Debian Jessie (8)

Kalo OS Anda Debian Jessie / Debian 8, perintahnya adalah sbb (susuaikan domainnya):

certbot certonly --webroot --text --renew-by-default --agree-tos --register-unsafely-without-email -w /var/www/html/example.com -d example.com -d www.example.com

Khusus Debian Jessie (8), harus menjalankan 5 perintah tambahan ini secara berturut (ganti example.com dengan domain sebenarnya)

sed -i '$ilisten 443 ssl http2;' /etc/nginx/sites-available/example.com
sed -i '$issl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;' /etc/nginx/sites-available/example.com
sed -i '$issl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;' /etc/nginx/sites-available/example.com
sed -i '$iif ( $scheme = "http" ) { return 301 https://$server_name$request_uri; }' /etc/nginx/sites-available/example.com
service nginx reload

Install Plugin SSL

Bagi pengguna WordPress, sangat disarankan untuk install plugin ReallySimpleSSL, supaya semua element yang masih HTTP, diganti jadi HTTPS. Install, aktifkan, lalu klik ini (akan log out dari wp-admin)

Pemasangan SSL untuk Domain Lainnya

Kalo mau nambah SSL untuk domain lain, maka tinggal dijalankan lagi perintah yang ini (Ganti aja domain-nya)

Debian Stretch (9)

certbot \
     --redirect \
     --agree-tos \
     --register-unsafely-without-email \
     --nginx \
     -d example.net -d www.example.net

Debian Jessie (8)

certbot certonly --webroot --text --renew-by-default --agree-tos --register-unsafely-without-email -w /var/www/html/example.net -d example.net -d www.example.net

Khusus Debian Jessie (8), harus menjalankan 5 perintah tambahan ini secara berturut (ganti example.net dengan domain sebenarnya)

sed -i '$ilisten 443 ssl http2;' /etc/nginx/sites-available/example.net
sed -i '$issl_certificate /etc/letsencrypt/live/example.net/fullchain.pem;' /etc/nginx/sites-available/example.net
sed -i '$issl_certificate_key /etc/letsencrypt/live/example.net/privkey.pem;' /etc/nginx/sites-available/example.net
sed -i '$iif ( $scheme = "http" ) { return 301 https://$server_name$request_uri; }' /etc/nginx/sites-available/example.net
service nginx reload

Anda Pengguna Cloudflare?

Bagi pengguna Cloudflare, ketika SSL nya sdh ON, ada yang harus dilakukan, silahkan pilih yang paling sreg.

Opsi 1 – Jika webnya ingin menggunakan fitur security dan ingin mendapat optimasi yang diberikan Cloudflare, silahkan login ke Cloudflare, pilih domainnya, ke menu Crypto, link nya (ganti example.com)

https://www.cloudflare.com/a/crypto/example.com

Di sana ada pengaturan SSL: Off, Flexible, Full, dan Full (strict). Silahkan atur agar menjadi Full (strict).

Hanya saja SSL yang muncul bukanlah SSL nya Let’s Encrypt, melainkan SSL Cloudflare. SSL yang muncul “SSL jamaah”, karena SSL nya digunakan oleh domain2 lain.

Opsi 2 – Kalo SSL yang muncul ingin SSL nya Let’s Encrypt, maka masuk ke menu DNS, link nya (ganti example.com)

https://www.cloudflare.com/a/dns/example.com

Di sana ada icon awan berwarna oranye. Silahkan di klik icon itu, sehingga jadi abu2.

Dengan demikian SSL yang muncul keliatan lebih prestise karena hanya dimiliki domain example.com saja. Contoh untuk salah satu domain saya https://jasa.hardinal.com/

Selamat mencoba.

15 thoughts on “Cara Pasang SSL Let’s Encrypt di VPS Nginx, Debian Jessie / Strecth

  1. saya bingung ya, kenapa sebelum di install https di webpagetest.org itu A semua, cuma cdn doang yang gak ada karna gak pakai cdn juga. saya install Redis sama FastCGI. dan ketika di redirect ke https, malah berantakan, A/B/C/NA/A/X .

    Bagaimana menurut mas?

  2. Mas, kalau pake SSL yg berbayar (mis.Comodo), itu settingannya/cara pasangnya beda lagi ya? Kali aja bisa direquest tutorialnya hehe. Terima kasih banyak sebelumnya, saya bisa pasang vps setelah baca blog Mas.

  3. Mas, kalau yg bagian cloudflare itu awannya jadi abu2, apakah situs tersebut masih pake cdn dan dns cloudflare? Atau sudah lepas?

  4. assalamualaikum mas
    saya udah coba ngikutin caranya
    tapi pas install certbot certonly –webroot –text –renew-by-default –agree-tos –register-unsafely-without-email -w /var/www/html/example.com -d example.com -d http://www.example.com

    saya mendapatkan error mas dengan tulisan Failed Authorization disertai tulisan example.com/.acme-challenge dst

    itu gmn ya mas ?

    terimakasih

  5. Pingback: Endri Susanto

  6. Pingback: Cara Install SSL Let’s Encrypt di Nginx / Apache dengan OS Debian 10 – Endri Susanto

Leave a Reply

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

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