Cara Memasang SSL Lets Encrypt Di Centos 7 Apache

Kali ini saya nak kongsikan pengalaman dan cara install SSL Lets Encrypt. Pengalaman ini hasil daripada apa yang saya lakukan di server sendiri.

Sebenarnya saya telah melalui dua peringkat penggunaan protokol https untuk blog ini. Peringkat pertama menggunakan ssl percuma dari cloudflare. Peringkat kedua menggunakan secara berbayar sebanyak USD5 dari PositiveSSL.

Jadi ini merupakan kali ketiga. Mungkin ada yang tertanya-tanya, apakah menggunakan ssl secara percuma dari cloudflare tidak bagus? ataupun yang berbayar itu tidak bagus?

Jawapannya, Bukannya tidak bagus..cuma saya nie orang yang suka menggodeh-godeh. OK berbalik semula kepada artikel cara memasang SSL.

Sepertimana yang anda telah sedia maklum, Let’s encrypt telah menyediakan SSL/TLS percuma(gratis) yang berfungsi secara automatik sepenuhnya. Sijil SSL ini disediakan oleh Internet Security Research Group(ISRG).

cara memasang ssl lets encrypt
Sebelum memasang ada empat perkara penting yang perlu diketahui tentang SSL lets encrypt terlebih dahulu. Antaranya ialah:

  • Sekiranya anda mempunyai domain, anda boleh menggunakan lets encrypt untuk memperolehi certificate SSL secara percuma(gratis)
  • Cara untuk mendapatkan certificate SSL dari Lets Encrypt amat mudah dan cepat kerana prosesnya berlaku secara automatik. Saya hanya mengambil masa selama 5 jam sahaja untuk proses pemasangan dan installation.
  • Boleh dikatakan Lets Encrypt sesuai digunakan pada hampir semua browser yang ada di internet ketika ini. Tambahan pula dengan menggunakan protokol https di server kita, perkara-perkara yang berkaitan dengan soal keselamatan lebih terjamin. Bukan itu sahaja, bahkan prestasi SEO blog juga akan bertambah baik.
  • Certificate SSL ini hanya percuma selama 90 hari tetapi anda meneruskannya lagi dengan melakukan proses auto renew.

Cara Install, Setting SSL Lets Encrypt

Tutorial ini saya buat di vps yang menggunakan Centos 7. Rasanya lebih kurang sama sahaja kalau anda menggunakan OS yang lain seperti Ubuntu.

Installation Dan Configuration Lets Encrypt

  1. Install Git dan download repo dari Let’s Encrypt ke server
  2. yum install git

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

    cd /opt/letsencrypt

    ./letsencrypt-auto --help

  3. Buat folder /etc/letsencrypt dengan menjalankan arahan di bawah.
  4. mkdir /etc/letsencrypt/

  5. Buat satu fail configuration yang menggunakan .ini di dalam folder /etc/letsencrypt. Contoh fail tersebut seperti saya gunakan ialah domain.ini. Jalankan arahan berikut.
  6. cd /etc/letsencrypt
    vi domain.ini

  7. Copy dan pastekan teks di bawah.

  8. # 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 = foo@example.com

    # 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

  9. Cari email = foo@example.com dan gantikan foo@example.com dengan alamat email anda. Email tersebut akan menerima notification apabila certificate akan tamat.
  10. Cari domains = example.com, www.example.com dan gantikan example.com dengan domain yang ingin diaktifkan SSL. Sekiranya ingin memasukkan banyak domain, pastikan letak tanda , selepas setiap domain.
  11. Selepas itu kita sudah boleh membuat SSL terhadap domain tadi dengan menjalankan arahan seperti di bawah.
  12. # Offkan webserver apache

    service httpd stop

    # Pergi ke folder /opt/letsencrypt

    cd /opt/letsencrypt

    # Generate SSL

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

    # Hidupkan webserver apache

    service httpd start

  13. Jika berjaya, SSL akan tercipta di dalam folder /etc/letsencrypt/live. Nama domain yang anda tukarkan pada domains = example.com akan berada di dalam folder /etc/letsencrypt/live. Sebagai contoh saya gantikan example.com kepada blogginspired.com, maka dalam folder tersebut akan ada fail blogginspired.com.
  14. Pada folder /etc/letsencrypt/live/blogginspired.com, akan terdapat tiga fail yang mempunyai ext .perm iaitu cert.pem, chain.pem, dan privkey.pem. Fail ini amat-amat diperlukan. Anda boleh lihat 3 fail berikut dengan menjalankan arahan di bawah.
  15. cat /etc/letsencrypt/live/blogginspired.com

Install SSL Ke Webserver Apache

Jika menggunakan webserver apache, masukkan sahaja SSL ke Virtual hosts sebagaimana contoh di bawah. Gantikan example.com dengan domain SSL.

ServerName example.com
ServerAlias example.com www.example.com
Redirect permanent / https://www.example.com/


ServerName example.com
ServerAlias example.com www.example.com
ServerAdmin dan@example.com
DocumentRoot /var/www/html/example.com
ErrorLog /var/log/httpd/example.com_error.log
CustomLog /var/log/httpd/example.com_access.log combined

Options FollowSymLinks Indexes
AllowOverride All
Order Allow,Deny
Allow from all
DirectoryIndex index.php

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

Cara Install SSL Lets Encrypt pada Sentora

Saya menggunakan sentora, jadi perlu lakukan beberapa perkara di bawah terlebih dahulu.

  1. Install mod_ssl

  2. yum install mod_ssl

  3. Edit fail ssl.conf dengan menjalankan perintah di bawah.
  4. vi /etc/httpd/conf.d/ssl.conf

  5. Letak # pada Listen 443 supaya menjadi seperti di bawah.

  6. #
    # When we also provide SSL we have to listen to the
    # the HTTPS port in addition.
    #
    # Listen 443

  7. Login ke panel sentora, Klik Admin –> Module Admin –> Apache Config. Gerakkan cursor ke bawah sehingga berjumpa Override a Virtual Host Setting. Pilih domain yang diaktifkan SSL.
  8. Pada Port Override isikan dengan 443 dan tick kan pada Forward Port 80 to Overriden Port.
  9. Pada Custom Entry, copy dan paste kan teks di bawah ini. Gantikan example.com kepada domain anda.
  10. 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

    # Keeping bellow for future upgrades.
    # Requires Apache >= 2.4
    # SSLCompression off

  11. Lakukan perintah di bawah ini
  12. php -q /etc/sentora/panel/bin/daemon.php

    service httpd restart

  13. Dah Selesai.

Auto Renew Lets Encrypt

SSL percuma hanya 90 hari, jadi kita perlu buat script untuk digunakan bersama cron supaya SSL akan dilanjutkan secara automatik apabila sudah hampir tamat.

  1. Apa yang perlu dilakukan ialah membuat script bash. Jalankan arahan seperti di bawah. Di bawah ini merupakan script bash untuk Centos 7
  2. vi /etc/letsencrypt/le-renew

  3. Jika menggunakan vi, “i” adalah untuk masukkan teks, “esc” untuk clearkan dan “:wq” untuk quit. Copy dan paste kan script di bawah.

  4. #!/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"
    /bin/systemctl stop $web_service
    $le_path/letsencrypt-auto certonly --standalone --agree-tos --renew-by-default --text --non-interactive --config $config_file
    echo "Starting $web_service"
    /bin/systemctl start $web_service
    echo "Renewal process finished for domain $domain"
    exit 0;
    fi

  5. Jalankan perintah di bawah.
  6. chmod +x /etc/letsencrypt/le-renew

  7. Buat cron job untuk memeriksa SSL akan expire satu bulan sekali. Jika kurang daripada 30 hari maka script tersebut akan merenew secara automatik. Lakukan arahan berikut.

crontab -e

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

Cuba execute script bash tadi. Keputusannya akan terjadi seperti mana di bawah:

Checking expiration date for blogginspired.com...
The certificate for blogginspired.com is about to expire soon. Starting webroot renewal script...
Stopping httpd
Saving debug log to bla bla bla bla...
Starting new HTTPS connection (1): bla bla bla.org
Renewing an existing certificate
Performing the following challenges:
tls-sni-01 challenge for blogginspired.com
tls-sni-01 challenge for www.blogginspired.com
Waiting for verification...
Cleaning up challenges
Generating key .........
Creating CSR: ...........

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/$domain..... Your cert
will expire on 2017-04-05. To obtain a new or tweaked version of
this certificate in the future, simply run letsencrypt-auto again.
To non-interactively renew *all* of your certificates, run
"letsencrypt-auto renew"
- If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

Starting httpd
Renewal process finished for domain blogginspired.com

Sekian sahaja cara pasang dan configuration SSL percuma dari Lets Encrypt. Terima kasih.

Jangan Lupa, Baca Ini Juga

Review SSL Murah Hanya USD5 Setahun