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.

SSL-Labs

Instalasi Let’s Encrypt

Instalasi Let’s Encrypt

sudo yum -y install git bc
sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

Buat sertifikat baru untuk domain example.com, sebelumnya hentikan dulu aplikasi Nginx

sudo systemctl stop nginx
cd /opt/letsencrypt
./letsencrypt-auto certonly --standalone -d example.com -d www.example.com -d mail.example.com
./letsencrypt-auto --help

Cek sertifikat yang dihasilkan

sudo ls -l /etc/letsencrypt/live/example.com

Membuat Diffie-Hellman key

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

Nginx

Konfigurasi TLS/SSL di aplikasi Nginx

sudo vi /etc/nginx/conf.d/ssl.conf
# contoh konfigurasi
server {
    listen 443 ssl;

    server_name example.com www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    # strong + backward compatibility
    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         10m;
    ssl_session_cache           shared:SSL:10m;
    ssl_ecdh_curve              secp384r1; # Requires nginx >= 1.1.0
    ssl_session_tickets         off; # Requires nginx >= 1.5.9
    ssl_stapling                on;
    ssl_stapling_verify         on;
    resolver                    $DNS1 $DNS2 valid=300s;
    resolver_timeout            5s;
    add_header                  Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
    add_header                  X-Frame-Options DENY;
    add_header                  X-Content-Type-Options nosniff;

    # The rest of your server block
    root /usr/share/nginx/html;
    index index.html index.htm;

    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
    }
}

Jalankan ulang Nginx

sudo systemctl start nginx

Cek instalasi di website SSL Labs

Update sertifikat otomatis

Sertifikat Let’s Encrypt hanya berlaku untuk 90 hari, akan tetapi direkomendasikan untuk melakukan update sertifikat setiap 60 hari untuk memberikan ruang untuk kesalahan. Berikut ini adalah perintah untuk melakukan update sertifikat.

/opt/letsencrypt/letsencrypt-auto renew

Edit crontab untuk membuat job baru yang akan menjalankan perintah update setiap minggu.

sudo crontab -e
# contoh job
30 2 * * 1 /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log
35 2 * * 1 /usr/bin/systemctl reload nginx

Update Let’s Encrypt

Pull versi baru dari Github

cd /opt/letsencrypt
sudo git pull