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

(Ngày: 09/01/2020)
Https được dùng để tăng tính bảo mật cho website. Nếu kinh phí của bạn không đủ để mua key cho website của mình thì Let’s Encrypt đã cung cấp cho chúng ta hoàn toàn miễn phí.

Sau đây, bắt đầu cài đặt Let’s Encrypt trên Ubuntu nhé.

Install Certbot

Chạy lệnh sau để add repo:

sudo add-apt-repository ppa:certbot/certbot

Chạy update để lấy những packege mới nhất:

sudo apt-get update

Cài Certbot:

sudo apt-get install certbot

Tạo Certificate

Để dùng được cerbot plugin, chúng ta cần thay đổi một số config của Nginx:

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

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 đã ok hết thì chạy tiếp 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 là thư mục của bạn. 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à xong.

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.

Khi chạy lệnh:

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

Bạn sẽ thu được kết quả:

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

Chạy xong, 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ành listen 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

Vào link sau để check xem đã hoạt động chưa:

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

Bạn sẽ thu được kết quả sau:

Hình

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 mỗi ngày vào khoảng 15h15 nên bạn có thể kiểm tra xem đã hết hạn hay chưa, nếu đã hết hạn thì tự động gia hạn.

viblo.asia