Thursday, January 26, 2017

Membuat Self-Signed CA SSL dengan OpenSSL dan Implementasinya di Apache2 & NGINX ~ Pt.3

  No comments
Assalamu'alaikum Wr. Wb
Ini adalah Bagian 3 dari artikel Membuat Self-Signed CA SSL dengan OpenSSL dan Implementasinya di Apache2 & NGINX. Pada bagian ini saya akan menulis tentang Implementasi SSL yang sudah kita buat sebelumnya di Web Server NGINX (baca: Engine X).

Checklist:
1. Siapkan file-file Sertifikat yang telah kita buat sebelumnya
smkn1pedan.ti.cert.pem (Site Certificate, Lokasi: intermediate/certs)
smkn1pedan.ti.key.pem (Site Private Key, Lokasi: intermediate/private)
2. Web Server NGINX (Terinstall dan Berjalan)
NGINX tersedia di Repository Resmi Debian. Jika belum menginstall, dapat diinstall dengan:
root@Halation:~# apt install nginx
3. OpenSSL
OpenSSL juga tersedia di Repository Resmi Debian. Apabila teman-teman belum menginstallnya, teman-teman dapat menginstall dengan perintah:
root@Halation:~# apt install openssl
Saya asumsikan semua Checklist diatas telah terpenuhi. Lalu silahkan upload file-file Sertifikat teman-teman ke Server.

Langkah-langkahnya:

1. Arahkan Current Directory ke folder Sites Available.
root@Halation:~# cd /etc/nginx/sites-available
2. Buat Konfigurasi VirtualHost baru
root@Halation:/etc/nginx/sites-available# nano smkn1pedan
3. Ini adalah contoh dasar konfigurasinya, silahkan sesuaikan dengan konfigurasi VirtualHost teman-teman
server {
    listen          443 ssl;
    server_name     nginx.smkn1pedan.ti;
    root            /var/www/html;
   
    ssl_certificate     /path/ke/file/certificate;
    ssl_certificate_key /path/ke/file/private/key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH !RC4";
    ssl_prefer_server_ciphers   on;
    index index.html index.htm index.php index.nginx-debian.html;
    location / {
                try_files $uri $uri/ =404;
    }
}
4. Apabila sudah silahkan teman-teman save file konfigurasi tersebut dengan menekan CTRL + X lalu tekan "y"

5. Aktifkan VirtualHost dengan membuat Symbolic Link ke /etc/nginx/sites-enabled
root@Halation:~# ln -s /etc/nginx/sites-available/smkn1pedan /etc/nginx/sites-enabled/smkn1pedan
6. Cek Syntax Parameter dan Konfigurasi kita dengan mengetikkan:
root@Halation:~# nginx -t
# Biasanya ketika teman-teman melakukan validasi konfigurasi ataupun merestart webserver, pasti webserver akan menanyakan Passphrase dari Private Key teman-teman.
# Apabila tidak ada error maka akan memberikan output
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
7. Nah disinilah bagian penentuannya, Restart NGINX dengan perintah
root@Halation:~# service nginx restart
Apabila teman-teman mendapatkan pesan seperti ini:
Job for nginx.service failed. See 'systemctl status nginx.service' and 'journalctl -xn' for details.
dan ketika teman-teman mengecek lognya:
 nginx: [emerg] SSL_CTX_use_PrivateKey_file("/etc/nginx/sslku/smkn1pedan.ti.key.pem") failed (SSL: error:0906406D:PEM routines:PEM_def_callback:problems getting password error:0906A068:PEM routines:PEM_do_header:bad password read error:140B0009:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib)
Selamat anda mendapatkan masalah!!! :)) 
Kalem, pesan yang saya cetak tebal adalah masalahnya. Saya sudah mengatakan diatas bahwa Setiap kali teman-teman melakukan Validasi Konfigurasi ataupun merestart Web Server, normalnya teman-teman akan diminta untuk memasukkan Passphrase dari Private Key teman-teman.

Akan tetapi teman-teman tidak diminta kan? yap, untuk saat ini saya belum mencoba versi lain dari NGINX selain yang saya pakai (1.6.2) di Debian.  Namun di NGINX saya yang ada di Ubuntu (1.10.0) tetap meminta Passphrase, dengan kata lain Normal.

Untuk solusi sementara saat ini kita dapat mengatasinya dengan menghapus enkripsi dari Private Key tersebut dengan cara:
root@Halation:/etc/nginx/sslku# openssl rsa -in smkn1pedan.ti.key.pem -out smkn1pedan.key
Buat Permission dari file tersebut agar hanya dapat dibaca oleh Root (r-- --- ---)
root@Halation:/etc/nginx/sslku# chmod 400 smkn1pedan.key
Setelah itu ubah konfigurasi ssl_certificate_key teman-teman untuk mengarah ke Private Key yang baru, lalu lakukan restart NGINX.


Problem Solved!! tetapi dengan menghapus Enkripsi dari Private Key akan menghasilkan keamanan Private Key teman-teman yang menjadi lebih rentan. Oleh karena itu pastikan Private Key baru yang tidak memiliki enkripsi ini selalu aman dan pastikan untuk selalu memperbaiki dan menutup celah sistem agar tidak terjadi peretasan yang berdampak pada keamanan Private Key teman-teman. :)

Oh iya, akan ada Part 4 yang mana Part 4 ini akan membahas bagaimana mengatasi masalah Untrusted Certificate alias Silang Merah yang ditemui karena menggunakan Self-Signed SSL.

Mungkin cukup sekian yang dapat saya sampaikan, semoga bermanfaat bagi teman-teman semua. Dan jangan sungkan untuk mengkoreksi saya apabila terdapat kesalahan :) 
Dan seperti biasa Terima Kasih..
Wassalamu'alaikum Wr. Wb.

No comments :

Post a Comment