Sharing seputar Dunia Tkj dan Blogging ^^

Thursday, August 4, 2016

Membuat Sertifikat Self Signed SSL untuk Nginx di Ubuntu


Tulisan lalu di Linuxku.com telah membahas mengenai SSL menggunkan Let's Encrypt. Sekarang kita beralih ke Self Signed SSL dari OpenSSL.

Perlu diketahui sertifikat self-signed SSL ini hanya untuk pembelajaran penggunaan SSL saja, jangan Anda gunakan sebagai sertifikat utama jika Anda memiliki situs yang berdomain. Mengapa? Karena sertifikat self-signed SSL ini tidak di baca oleh peramban (browser) secara otomatis. Jika Anda ingin otomatis, gunakan sertifikat yang diakui seperti Let's Encrypt.

Tahap Instalasi

Pertama-tama pastikan Anda sudah memasang Nginx pada Ubuntu Anda. Bisa lihat pada tulisan lama di linuxku.com yakni:
  1. http://www.linuxku.com/2016/06/install-lamp-linux-apache-mysql-dan-php.html
  2. Opsional saja jika Anda menggunakan virtual host di Nginx:
    http://www.linuxku.com/2016/05/menerapkan-virtualhost-untuk-keperluan.html
Kemudian jalankan perintah berikut:
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt
Berikut ini keterangan dari perintah di atas:
  • req: Adalah perintah untuk me-request.
  • -x509: Tipe atau nama tampilan sertifikat yang digunakan.
  • -nodes: Opsi ini memberitahu kepada OpenSSL untuk melewatkan pengamanan sertifikat dengan frasa sandi. Kita perlu Nginx untuk dapat membaca berkas tanpa campur tangan pengguna, ketika server dijalankan, dengan adanya opsi ini mencegah kita memasukan kata sandi setiap restart.
  • -days 365: Opsi ini adalah durasi lamanya sertifkat, contoh di sini 365 hari atau setara dengan satu tahun.
  • -newkey rsa:2048: Opisi ini adalah opsi untuk meng-generate sertifikat RSA key sebanyak 2048 bit.
  • -keyout: Opsi ini adalah tempat untuk menaru private key.
  • -out: Opsi ini adalah hasil sertifikat yang kita buat.
Setelah Anda melakukan perintah di atas, maka openSSL akan memberikan beberapa pertanyaan yang harus Anda isi. Seperti berikut:
Country Name (2 letter code) [AU]:ID
State or Province Name (full name) [Some-State]:Jakarta
Locality Name (eg, city) []:South Jakarta
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Cilsy Fiolution
Organizational Unit Name (eg, section) []:Linux Support
Common Name (e.g. server FQDN or YOUR name) []:192.168.2.8
Email Address []:admin@linuxku.com

Di samping kita menggunakan OpenSSL, kita juga perlu membuat grup Diffie-Hellman yang kuat, yang digunakan dalam negosiasi Perfect Forward Secrecy dengan klien.
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Pembuat Diffie-Hellman membutuhkan waktu yang cukup lama tergantung seberapa cepat komputer Anda menciptakan generated code sebanyak 2048 bit.

Tahap konfigurasi

Pertama-tama kita buat dahulu direktori snippts:
$ sudo mkdir /etc/nginx/snippets
Lalu buat berkas dengan nama self-signed.conf:
$ sudo nano /etc/nginx/snippets/self-signed.conf
Dan isikan seperti skrip di bawah ini:
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
Lalu buat berkas ssl-param.conf:
$ sudo nano /etc/nginx/snippets/ssl-params.conf
Dan isinya seperti skrip di bawah ini:
# from https://cipherli.st/
# and https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
#ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# Disable preloading HSTS for now.  You can use the commented out header line that includes
# the "preload" directive if you understand the implications.
#add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;

ssl_dhparam /etc/ssl/certs/dhparam.pem;
Kemudian tahap pengaturan di Nginx, kita gunakan virtualhost pada vhost default, yakni:
$ sudo nano /etc/nginx/sites-available/default
Isi dengan skrip berikut:
server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;
        server_name coba.com;
        return 302 https://$server_name$request_uri;
}
server{
       ssl on;
       listen 443 ssl http2 default_server;
       listen [::]:443 ssl http2 default_server;
       include snippets/self-signed.conf;
       include snippets/ssl-params.conf;
}

Tahap Testing

Setelah sudah semua sekarang kita coba tes, ketik https di peramban Anda:

Anda akan dimintai sertifikat, seperti uraian sebelumnya bahwa sertifikat self-signed SSL tidak otomatis dideteksi oleh peramban, jadi Anda perlu menambahkan pengecualian (Add Exception).

Jika sudah berhasil maka tampilan server Anda akan seperti gambar di bawah ini:
Pada gambar di atas Anda akan melihat gambar ikon kunci tapi bertanda seru dengan indikator kuning, ini artinya Anda memberikan sertifikat pengcualian pada peramban.

Semoga bermanfaat. :)

Sumber:
  • https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-nginx-in-ubuntu-16-04

Website ini menganut paham demokrasi wkwk
Jangan lupa gunakan emot biar akrab gan (/ ^.^)/
EmoticonEmoticon