![]() |
Mekanisme kerja Secure HTTPS dengan let'sencrypt |
Let'sencrypt
Let’s Encrypt adalah Certificate Authority (CA) yang gratis dan terotomatisasi yang berjalan untuk kepentingan umum. Let’s Encrypt adalah sebuah layanan yang disediakan oleh Internet Security Research Group (ISRG). Prinsip-prinsip dasar dari Let’s Encrypt adalah gratis, otomatis, aman, transparan, terbuka, dan koperatif.Instalasi Let'sencrypt
Untuk mendapatkan sertifikat let'sencrypt, kita dapat menggeneratenya pada server CentOS. Namun terlebih dahulu kita harus melakukan instalasi beberapa aplikasi pendukung sebagai berikut,
Install git dan bc dengan menggunakan perintah berikut,
# yum install git bc
Kemudian Clone directory let'sencrypt dari github dengan perintah berikut,
# git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
Lalu matikan service nginx denga menggunakan perintah berikut
# systemctl stop nginx
Berpindahlah pada directory /opt/letsencrypt
cd /opt/letsencrypt
Lalu jalankan letsencrypt untuk mendapatk sertifikat ssl dengan menggunakan perintah berikut,
# ./letsencrypt-auto certonly --standalone -d example.com -d www.example.com -d mail.example.com
Kemudian pada directory /etc/letsencrypt/live/example.com (sesuai dengan domain) akan dihasilkan beberapa file diantaranya,
- cert.pem: Your domain's certificate
- chain.pem: The Let's Encrypt chain certificate
- fullchain.pem: cert.pem and chain.pem combined
- privkey.pem: Your certificate's private key
Bila ke empat file telah terdapat pada directory tersebut, maka ssl telah didapat untuk domain yang diinginkan. Bagian selanjutnya ialah menghasilkan Diffie-Hellman Group, jalankan perintah berikut,
# openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096
Konfigurasi TSL/SSL pada NGINX
Buatlah sebuah file config pada directory /etc/nginx/conf.d/ dengan nama ssl.conf, dengan menjalankan perintah berikut,
# ee /etc/nginx/conf.d/ssl.conf
Kemudian ketikkan konfigurasi berikut,
server {
listen 443 ssl;
server_name example.com;
root /usr/share/nginx/html;
index index.php index.html index.htm;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security max-age=15768000;
location ~ /.well-known {
allow all;
}
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
server {
listen 443 ssl;
server_name www.example.com;
root /usr/share/nginx/html;
index index.php index.html index.htm;
ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security max-age=15768000;
location ~ /.well-known {
allow all;
}
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Lalu restart NGINX dengan perintah berikut,
# systemctl start nginx
Automatic redirect all HTTP to HTTPS
Ketika user mengakses web, secara default mereka akang mengakses http. Oleh karena itu, konfigurasi berikut akan membuat redirect semua request http menjadi https.
Buka file /etc/nginx/nginx.conf dengan menggunakan perintah berikut,
# ee /etc/nginx/nginx.conf
Kemudian lakukan perubahan seperti berikut,
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name example.com;
root /usr/share/nginx/html;
return 301 https://$host$request_uri;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
Setelah itu buka web tersebut dengan alamat yang telah di set, contohnya www.example.com
Update otomatis sertifikat
Sertifika letsencrypt hanya berlaku selama 90 hari, jadi dalam kurang dari 90 hari harus dilakukan update sertifikat.Update sertifikat ini dapat dilakukan secara otomatis dengan menggunakan Crontab. Jalankan Crontab dengan perintah berikut,
# crontab -e
Lalu tambahkan bagian kode berikut,
30 2 * * 1 /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log
35 2 * * 1 /usr/bin/systemctl reload nginx
Untuk melakukan update versi terbaru Letsencrypt jalankan perintah berikut,
# cd /opt/lestencrypt
# sudo git pull
Sekarang website anda telah terlindungi dengan ssl. Hasil yang didapat mungkin bervariasi. Dalam percobaan untuk menghasilkan ssl sertifikat ini, sempat beberapa kali mengalami kegagalan. Bagi yang mempunyai pengalam berbeda pada saat Instalasi silahkan tinggalkan komentar dibawah.
Pustaka
https://bjornjohansen.no/lets-encrypt-for-nginx
https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-centos-7
0 comments:
Post a Comment