Cài đặt https miễn phí cho website

Hiện nay hầu hết các website đều sử dụng https để tăng tính bảo mật cho website của mình, ngay cả google cũng tuyên bố rằng https sẽ ảnh hưởng đến xếp hạng của website đó, vì vậy để có thứ hạng tốt trên các công cụ tìm kiếm thì chúng ta nên sử dụng https cho website của mình. Có nhiều người có kinh phí éo hẹp nên không thể bỏ tiền ra để mua key cho website của mình, thật may mắn là Let’s Encrypt đã cung cấp cho chúng ta hoàn toàn miễn phí.

Let’s Encrypt là một nhà cung cấp chứng chỉ số SSL (Certificate Authority) hoàn toàn miễn phí, được nhiều cá nhân và tổ chức tin dùng và đặc biệt không giới hạn.

Trong bài viết này tôi sẽ hướng dẫn các bạn cài đặt Let's Encrypt trên ubuntu 14.01 và nginx.

Install Certbot

  • Đầu tiên chạy lệnh sau để add repo:
sudo add-apt-repository ppa:certbot/certbot
  • Chạy update để lấy những package mới nhất
sudo apt-get update
  • Cuối cùng cài Certbot
sudo apt-get install certbot

Tạo Certificate

Trước tiền để dùng được cerbot plugin chúng ta cần thay đổi một số config của Nginx như sau:

sudo nano /etc/nginx/sites-available/default

Và add vào đoạn mã sau:

server {
        . . .

        location ~ /.well-known {
                allow all;
        }

        . . .
}

kiểm tra config đã chính xác và restart lại nginx để nó nhận config mới:

sudo nginx -t
sudo service nginx restart

Nếu mọi thứ đã ok thì chúng ta sẽ chạy lệnh sau để lấy Certificate:

certbot certonly --webroot --webroot-path=/home/zazahub.xyz/public_html  -d  zazahub.xyz  -d www.zazahub.xyz

Chú ý:

/usr/share/nginx/html thu mục code của bạn. zazahub.xyz và www.zazahub.xyz là tên domain của bạn. khi cài nó sẽ yêu cầu bạn nhập email và đồng ý với chính sách của họ, nên chỉ cần nhập email và đồng ý là ok

Chạy xong xuất hiện thế này là ok:

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
  /etc/letsencrypt/live/zazahub.xyz/fullchain.pem. Your cert
   will expire on 2017-08-24. To obtain a new or tweaked version of
   this certificate in the future, simply run certbot again. To
   non-interactively renew *all* of your certificates, run "certbot
   renew"
 - If you lose your account credentials, you can recover through
   e-mails sent to [email protected]
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - 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

Chú ý:

/etc/letsencrypt/live/zazahub.xyz là nơi lưu trữ CER của bạn 2017-08-24 là thời gian hết hạn của CER, được 3 tháng mỗi lần (đừng lo sẽ có gia hạn tự động)

khi chạy lệnh :

ls -l /etc/letsencrypt/live/zazahub.xyz/

Chúng ta thu được kết quả như sau:

cert.pem -> ../../archive/zazahub.xyz/cert1.pem   // domain certificate
chain.pem -> ../../archive/zazahub.xyz/chain1.pem // The Let's Encrypt chain certificate
fullchain.pem -> ../../archive/zazahub.xyz/fullchain1.pem  // gộp 2 cái trên
privkey.pem -> ../../archive/zazahub.xyz/privkey1.pem // Your certificate's private key

Generate Strong Diffie-Hellman Group

Chạy tiếp lệnh sau:

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

lệnh này chạy khá lâu, khéo mất cả phút đó 😃

sau đó bạn sẽ thấy một file trong thư mục /etc/ssl/certs/dhparam.pem.

Thay đổi config

  • Chuyển listen 80 default_server; thànhlisten 443 ssl http2;
  • Sau dòng server_name thêm đoạn code sau:
# SSL
	ssl_certificate /etc/letsencrypt/live/zazahub.xyz/fullchain.pem;
	ssl_certificate_key /etc/letsencrypt/live/zazahub.xyz/privkey.pem;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
	ssl_prefer_server_ciphers on; 
	ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;

        # Improve HTTPS performance with session resumption
        ssl_session_cache shared:SSL:50m;
        ssl_session_timeout 1d;

        # DH parameters
        ssl_dhparam /etc/nginx/ssl/dhparam.pem;
        # Enable HSTS
        add_header Strict-Transport-Security "max-age=31536000" always;

Chú ý thay đổi đường dẫn cho phù hợp

Chuyển hướng http sang https

server {
    listen 80;
    server_name zazahub.xyz www.zazahub.xyz;
    return 301 https://$host$request_uri;
}

Cuối cùng restart lại nginx

sudo service nginx restart

để check xem đã hoạt đọng chưa ta vào link sau:

https://www.ssllabs.com/ssltest/analyze.html?d=zazahub.xyz

Sẽ thu được kết quả như sau:

Tự động gia hạn

Chạy lênh sau để setup cron:

sudo crontab -e

Add đoạn mã này vào file:

15 3 * * * /usr/bin/certbot renew --quiet --renew-hook "/usr/sbin/service nginx reload"

Cron này sẽ tự động chạy vào lúc 15h15 phút mỗi ngày để kiểm tra xem đã hết hạn hay chưa, nếu hết hạn tự động gia hạn.

Nguồn

All Rights Reserved