Cài đặt SSL cho website sử dụng certbot




1. SSL là gì.

Trước khi nói về ssl chúng ta nhắc lại về HTTP là gì đã nhé.HTTP là giao thức dùng để truyền nhận dữ liệu.Nhược điểm của http là dữ liệu được truyền dưới dạng plain text, không hề được mã hóa hay bảo mật nên nếu gói tin chúng ta gửi bằng http bị tin tặc bắt được thì mọi thông tin sẽ bị lộ.
SSL viết tắt của cụm từ Secure Sockets Layer là tiêu chuẩn về an ninh công nghệ trên toàn cầu, nói dễ hiểu thì ssl thực hiện mã hóa thông tin truyền nhận, các dữ liệu được gửi qua phương thức này sẽ được mã hóa, website của bạn nếu sử dụng ssl thì sẽ có https trên url.Nhìn chung phương thức https có độ bảo mật cao hơn nhiều so với http, mặc dù không phải tuyệt đối.


2.Cài đặt SSL.
A.Trước tiên chúng ta cần cài đặt nginx để làm web server
Đối với ubuntu thì các bạn chạy các lệnh sau:
$ sudo apt update
$ sudo apt install nginx
$ sudo ufw allow 'Nginx HTTP'

Nginx default page

Đối với Centos thì các bạn chạy lệnh :
$ sudo yum install epel-release
$ sudo yum install nginx
$ sudo systemctl start nginx

Nếu Centos đang sử dụng firewall thì chạy thêm các lệnh sau:
$ sudo firewall-cmd --permanent --zone=public --add-service=http
$ sudo firewall-cmd --permanent --zone=public --add-service=https
$ sudo firewall-cmd --reload

Sau khi cài đặt xong muốn controll service nginx các bạn sử dụng các lệnh sau:
$ sudo systemctl stop nginx
$ sudo systemctl start nginx
$ sudo systemctl restart nginx
$ sudo systemctl status nginx
$ sudo systemctl reload nginx

Mặc định nginx sẽ auto khởi động khi hệ thống khởi động lại, nếu không muốn điều đó thì dùng lệnh :
$ sudo systemctl disable nginx
// bật lại thì dùng lệnh
$ sudo systemctl enable nginx

B.Tạo tên miền và trỏ về địa chỉ máy chủ

Ở ví dụ này mình sử dụng domain của goddady, việc mua một tên miền khá đơn giản các bạn có thể tìm mua một tên miền rồi vào thao tác như mình nhé

Sau khi tạo được domain và trỏ về máy chủ để check xem tên miền đã trỏ tới máy chủ của mình chưa thì gõ lệnh
$ ping chat.bionicmachine.co
//kết quả như sau
PING chat.bionicmachine.co (18.141.143.133) 56(84) bytes of data
Tiếp theo các bạn hãy tạo một file config trong thư mục conf.d.Nội dung file các bạn có thể tham khảo file nginx để chạy một project nodejs của mình.
server {
listen 80;
server_name demo.bionicmachine.co;
return 301 https://$server_name$request_uri;
}

server {
listen 443 ssl;
server_name demo.bionicmachine.co;
location / {
proxy_pass http://localhost:9999;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}

Tiếp theo chỉ cần restart lại nginx
$ sudo systemctl reload nginx


Các bạn nhớ mở cổng 80 và 443.Lúc này khi truy cập vào demo.bionicmachine.co sẽ thấy website đã chạy rồi tuy nhiên mới chỉ đang chạy trên giao thức http thôi.
Tiếp tục config để nó có thể chạy https.

b1: Tạo thư mục certbot và clone project theo lệnh:
$ git clone https://github.com/certbot/certbot
$ cd certbot
$ ./certbot-auto certonly --nginx -d demo.bionicmachine.co
Yêu cầu để chạy certbot là python version > 2.7.x
Trong lúc cài đặt sẽ có một số câu hỏi các bạn cứ đồng ý theo hướng dẫn rồi nhập địa chỉ email vào.
Sau khi chạy xong các bạn sẽ thấy thông báo thành công cùng đường dẫn 2 file fullchain.pem, privkey.pem

b2: Auto renew cert(edit in crontab)
$ sudo crontab -e
// thêm vào dòng này
00 04 28 * * /your_dir/certbot/certbot-auto renew --pre-hook
"service nginx stop" --post-hook "service nginx start"


Ở đây mình sử dụng nginx nên sẽ reload service nginx

b3: chỉnh sửa lại file config nginx phía trên
server {
listen 80;
server_name demo.bionicmachine.co;
return 301 https://$server_name$request_uri;
}

server {
listen 443 ssl;
server_name demo.bionicmachine.co;

ssl_certificate /etc/letsencrypt/live/demo.bionicmachine.co/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/demo.bionicmachine.co/ên;
ssl on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#this where socket io will be handling the request
location / {
proxy_pass http://localhost:9000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}

Các bạn chú ý có thêm 4 dòng ssl được thêm vào file config.Sau khi thay đổi thì reload lại nginx để kiểm tra thành quả.
$ sudo systemctl reload nginx


Vậy là mình đã hướng dẫn cho các bạn cách ssl cho website sử dụng certbot một công cụ free.Chúc các bạn học tập và làm việc vui vẻ.
P/S Xin lỗi mọi người do dạo gần đây blog đổi giao diện viết blog, mình chưa tìm lại được đoạn thêm html nên block code nhìn hơi khác so với mọi lần

                                                                                                    Happy codding ^_^ 

Nhận xét

  1. Đúng thứ tôi đang cần, cám ơn bạn nhé :)

    Trả lờiXóa
  2. À cho mình hỏi là khi renew cert mình ko dùng tk root có được không bạn?

    Trả lờiXóa

Đăng nhận xét

Bài đăng phổ biến từ blog này

Xây dựng một hệ thống comment real-time hoặc chat đơn giản sử dụng Pusher

CÁC BÀI TẬP SQL CƠ BẢN - PART 1

Xây dựng một hệ thống tracking hành vi người dùng (phần 1)

Xây dựng một hệ thống tracking hành vi người dùng (phần 2)

Enterprise architecture trên 1 tờ A4

Web caching (P2)

Bàn về async/await trong vòng lặp javascript

Web caching (P1)

Cài đặt môi trường để code website Rails