Cài đặt https miễn phí cho website
Bài đăng này đã không được cập nhật trong 3 năm
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@example.com.
- 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