Everything can do it :p

Blog

SSL Gratis dari Lets Encrypt

Posted by in servers ssl on

SSL adalah Secure Socket Layer(SSL) protokol keamanan yang mengamankan semua bentuk transaksi yang ada di website Anda. Mulai dari sekedar akses website hingga transaksi yang sensitif seperti pendaftaran, online shopping, email, hingga transaksi kartu kredit.

Atau kata lainnya untuk membuat hijau address bar di browser kita (hehe). dengan asumsi web kita dapat dipercaya.

Ok, saya bagikan triknya untuk mendapatkan SSL Gratis dari Lets Encrypt.

Instalasi Lets Encrypt :

Saya disini menggunakan Ubuntu 14.04

yum install git

# Clone repo ke direktori /opt/letsencrypt

git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

cd /opt/letsencrypt

./letsencrypt-auto --help

Buat folder /etc/letsencrypt dengan menjalankan perintah berikut:

mkdir /etc/letsencrypt

Setelah itu buat file konfigurasi di folder /etc/letsencrypt dengan ekstensi .ini misal domain.ini dan paste teks berikut:

# This is an example of the kind of things you can do in a configuration file.
# All flags used by the client can be configured here. Run Let's Encrypt with
# "--help" to learn more about the available options.

# Use a 4096 bit RSA key instead of 2048
rsa-key-size = 4096

# Uncomment and update to register with the specified e-mail address
email = [email protected]

# Uncomment and update to generate certificates for the specified
# domains.
domains = example.com, www.example.com

# Uncomment to use a text interface instead of ncurses
# text = True

# Uncomment to use the standalone authenticator on port 443
# authenticator = standalone
# standalone-supported-challenges = tls-sni-01

# Uncomment to use the webroot authenticator. Replace webroot-path with the
# path to the public_html / webroot folder being served by your web server.
# authenticator = webroot
# webroot-path = /usr/share/nginx/html

Catatan:

  • Ganti opsi email dengan email kamu untuk notifikasi ketika sertifikat akan expire.
  • Untuk opsi domains isikan semua domain kamu yang ingin dibuatkan SSL-nya. Ingat untuk memisahkan dengan koma untuk tiap domainnya.

Kita tinggal membuat SSL untuk domain yang sudah kita tuliskan diatas dengan menjalankan perintah seperti berikut:

# Matikan webservernya

service apache2 stop

# Masuk ke folder /opt/letsencrypt

cd /opt/letsencrypt

# Generate SSL

./letsencrypt-auto certonly --standalone --agree-tos --renew-by-default --config /etc/letsencrypt/domain.ini

# Nyalakan lagi webservernya

service apache2 start

SSL akan tercipta di folder /etc/letsencrypt/live dan untuk nama menggunakan domain pertama pada opsi domains di file konfigurasinya misal example.com.

Ada 3 buah file berekstensi .pem yang kita perlukan yaitu: cert.pem, chain.pem, dan privkey.pem.

Instalasi SSL ke Webserver

Saya menggunakan webserver Apache dan kita cukup menambahkan SSL yang ada ke virtual host. Contoh:

<virtualhost *:80>
    ServerName example.com
    ServerAlias example.com www.example.com
    Redirect permanent / https://www.example.com/
</VirtualHost>

<virtualhost *:443>
    ServerName example.com
    ServerAlias example.com www.example.com
    ServerAdmin [email protected]
    DocumentRoot /var/www/html/example.com
    ErrorLog /var/log/httpd/example.com_error.log
    CustomLog /var/log/httpd/example.com_access.log combined
    <Directory "/var/www/html/example.com">
        Options FollowSymLinks Indexes
        AllowOverride All
        Order Allow,Deny
        Allow from all
        DirectoryIndex index.php
    </Directory>
    SSLEngine on
    SSLProtocol ALL -SSLv2 -SSLv3
    SSLHonorCipherOrder On
    SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
    SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
</VirtualHost>

Catatan: Ganti example.com dengan domain SSL kamu.

 

Auto-renew Let’s Encrypt

Masa berlaku dari SSL-nya hanya 90 hari jadi solusi yang paling tepat adalah kita membuat script bash yang dipadukan dengan cron untuk memperpanjang SSL secara otomatis jika sudah akan expire.

Pertama buat script bash-nya:

vi /etc/letsencrypt/le-renew

Isikan dengan script berikut:

#!/bin/bash

web_service='httpd'
config_file="/etc/letsencrypt/domain.ini"
le_path='/opt/letsencrypt'
exp_limit=30;

if [ ! -f $config_file ]; then
    echo "[ERROR] config file does not exist: $config_file"
    exit 1;
fi

domain=`grep "^\s*domains" $config_file | sed "s/^\s*domains\s*=\s*//" | sed 's/(\s*)\|,.*$//'`
cert_file="/etc/letsencrypt/live/$domain/fullchain.pem"

if [ ! -f $cert_file ]; then
    echo "[ERROR] certificate file not found for domain $domain."
fi

exp=$(date -d "`openssl x509 -in $cert_file -text -noout|grep "Not After"|cut -c 25-`" +%s)
datenow=$(date -d "now" +%s)
days_exp=$(echo \( $exp - $datenow \) / 86400 |bc)

echo "Checking expiration date for $domain..."

if [ "$days_exp" -gt "$exp_limit" ] ; then
    echo "The certificate is up to date, no need for renewal ($days_exp days left)."
    exit 0;
else
    echo "The certificate for $domain is about to expire soon. Starting webroot renewal script..."
    echo "Stopping $web_service"
    service $web_service stop
    $le_path/letsencrypt-auto certonly --standalone --agree-tos --renew-by-default --config $config_file
    echo "Starting $web_service"
    service $web_service start
    echo "Renewal process finished for domain $domain"
    exit 0;
fi

Setelah disimpan pastikan script tersebut bisa dieksekusi:

chmod +x /etc/letsencrypt/le-renew

Sekarang kita hanya perlu membuat cron yang berjalan satu minggu sekali untuk mengecek apakah SSL sudah mau expire dan jika SSL akan expire kurang dari 30 hari maka otomatis script bash akan me-renew sertifikatnya.

# Membuka crontab

crontab -e

# Isikan baris berikut

30 2 * * 1 /etc/letsencrypt/le-renew > /var/log/le-renew.log 2>&1

 

 


 

Leave a Reply

Tweets