Knowledge Hướng Dẫn Cài Đặt Let’s Encrypt Ssl Certificate Trên Apache (centos 6 / 7)

Discussion in 'Máy chủ' started by Twisted, Apr 2, 2017.

  1. Twisted Membership

    Hi, xin chào các bạn, hôm nay 2-tek sẽ hướng dẫn các bạn cài đặt Let’s Encrypt SSL Certificate, một nhà cung cấp chứng chỉ SSL/TSL miễn phí lên Apache server chạy OS Centos 6 / 7

    [​IMG]
    Lưu ý: Nếu các bạn đang xài CloudFlare thì tắt nó đi nhé để quá trình install thuận tiện hơn

    Bước 1: Cài đặt mod ssl cho Apache
    Bước 2: Restart Apache
    Bước 3: Kiểm tra cài đặt EPEL phiên bản mới nhất và Update OS:
    Bước 4: Cài đặt Git Client
    Bước 5: Cài đặt Let’s Encrypt client
    Bước 6: Lấy một chứng chỉ Let’s Encrypt SSL Certificate miễn phí cho Apache
    [​IMG]
    Trong quá trình cài đặt Let’s Encrypt SSL Certificate, các bạn nhập Email để nhận key backup và lần lượt chọn Agree. Sau đó các bạn chọn ssl.conf => Next và chọn cái đầu tiên (Easy Allow both HTTP and HTTPS access to these sites) tức là các bạn chạy song song HTTP và HTTPS, hoặc các bạn có thể chọn cái thứ 2 (Secure Make all request redirect to secure HTTPS access) nếu các bạn muốn nó chỉ chạy HTTPS none HTTP. => Enter (OK)

    Xong quá trình cài đặt, các bạn kiểm tra thành quả tại: SSLABS (https://goo.gl/VuaET7)

    Nhưng sau khi cài đặt các bạn chỉ cài SSL phiên bản cũ (-SSLv2), ta tiếp tục cập nhật cho nó lên V3 (-SSLv3)

    Các bạn tiến hành edit file ssl.conf:
    Tìm:
    Sửa thành:
    [​IMG]
    Tiếp đến tìm SSLCipherSuite và thêm # trước nó để bỏ hiệu lực của nó sau đó thêm vào bên dưới một SSLCipherSuite mới:
    Code:
    SSLCipherSuite          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
    SSLHonorCipherOrder     on
    SSLOptions +StrictRequire
    [​IMG]
    Khởi động lại Apache:
    Và các bạn kiểm tra lại một lần nữa với SSLABS (https://goo.gl/VuaET7), lần này các bạn đã cập nhật hoàn toàn SSL rồi nhé, màu xanh lá cây hết nhé!

    [​IMG]
    Xong quá trình cài đặt Let’s Encrypt Certificates, nhưng một vần đề nhỏ là Let’s Encrypt Certificates chỉ cho các bạn dùng 30 ngày, hết hạn các bạn phải tự gia hạn bằng lệnh, để tránh rắc rối mình hướng dẫn luôn cho các bạn tự động renew khi Let’s Encrypt Certificates hết hạn, các bạn làm như sau:
    Tạo một file renew cho Centos:
    Code:
    !/bin/bash
    domain=$1
    le_path='/usr/local/letsencrypt'
    le_conf='/etc/letsencrypt'
    exp_limit=30;
    get_domain_list(){
    certdomain=$1
    config_file="$le_conf/renewal/$certdomain.conf"
    if [ ! -f $config_file ] ; then
    echo "[ERROR] The config file for the certificate $certdomain was not found."
    exit 1;
    fi
    domains=$(grep --only-matching --perl-regex "(?<=domains \= ).*" "${config_file}")
    last_char=$(echo "${domains}" | awk '{print substr($0,length,1)}')
    if [ "${last_char}" = "," ]; then
    domains=$(echo "${domains}" |awk '{print substr($0, 1, length-1)}')
    fi
    echo $domains;
    }
    if [ -z "$domain" ] ; then
    echo "[ERROR] you must provide the domain name for the certificate renewal."
    exit 1;
    fi
    cert_file="/etc/letsencrypt/live/$domain/fullchain.pem"
    if [ ! -f $cert_file ]; then
    echo "[ERROR] certificate file not found for domain $domain."
    exit 1;
    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 renewal request..."
    domain_list=$( get_domain_list $domain )
    "$le_path"/letsencrypt-auto certonly --apache --renew-by-default --domains "${domain_list}"
    echo "Restarting Apache..."
    /usr/bin/systemctl restart httpd
    echo "Renewal process finished for domain $domain"
    exit 0;
    fi
    Cài đặt bc:
    Code:
    yum install bc -y
    chmod +x /usr/local/bin/le-renew-centos
    /usr/local/bin/le-renew-centos your_domain.tld (thay your_domain.tld thành tên miền của bạn)
    Cài đặt crontab (nếu các bạn cài rồi thì thôi)
    Code:
    yum install cronie -y
    Khởi động crontab và bật luôn chạy:
    Code:
    service crond start
    chkconfig crond on
    Thiết lập 1 crontab để auto renew:
    Code:
    crontab -e
    Các bạn bấm o (chữ o) để thêm lệnh hiện hành, ta thêm lện sau:
    Code:
    0 1 1 */2 * /usr/local/bin/le-renew-centos your_domain.tld >> /var/log/your_domain.tld-renew.log 2>&1 (thay your_domain.tld thành tên miền của bạn)
    Sau đó các bạn gõ ESC để thoát lệnh và :wq để thoát crontab, xong reboot VPS/SERVER để xem thành quả!

    Chúc các bạn thành công!
     
    Last edited: Apr 2, 2017
    #1

Share This Page