[HTTP Series] Configure HTTPS use Let’s Encrypt

3 min read

Tiếp nối series trước Configure HTTPS use Self-Signed Certificate, phần này chúng ta sẽ tìm hiểu làm sao để cấu hình HTTPS với Nginx Webserver từ Let’s Encrypt

Yêu cầu chung

  • Virtual Machine (Máy ảo) như VPS, EC2 (trên AWS cloud), VM (Google Cloud Platform, Azure Cloud)
  • Địa chỉ IP Public được liên kết với máy ảo ở trên
  • Domain (bao gồm trang quản lý domain)

Chuẩn bị

  • Create 1 VM kèm public IP, chẳng hạn tạo tại Azure Cloud
  • Sau khi hoàn thành, nó sẽ có IP Public do Azure cấp: 20.92.229.16
  • Tiếp theo truy cập vào VM và cài đặt Nginx (như bài series trước)
  • Sau khi cài đặt xong Nginx, truy cập vào IP public 20.92.229.16 sẽ show ra trang default của Nginx (cần mở firewall của VM với port 80-HTTP và 443-HTTPS)
  • Cuối cùng, cần có domain (ở đây đã mua tên miền spoved.xyzName Cheap) và tạo 1 domain, ví dụ ant-https.spoved.xyz gắn vào IP Public trên
  • Đợi 1 thời gian để DNS Server có thể phân giải tên miền ant-https.spoved.xyz, và khi truy cập
  • Như ảnh trên domain ant-https.spoved.xyz đã phân giải đúng IP Public. NOTE: Đây là mạng global, nên ai cũng có thể truy cập được. Chúng ta đã xong phần chuẩn bị.

Cài Đặt HTTPS với Let’s Encrypt

Let’s Encrypt là dịch vụ cung cấp chứng chỉ SSL/TLS miễn phí và tự động.

  • Cài đặt Certbot
    Certbot là công cụ phổ biến để làm việc với Let’s Encrypt.
# Trên Ubuntu
sudo apt update
sudo apt install certbot python3-certbot-nginx
  • Chỉnh lại file config của Nginx để nhận biết đúng domain, chúng ta sẽ chỉnh ở file default:
sudo vim /etc/nginx/sites-available/default
  • Chúng ta chỉ cần sửa server_name ant-https.spoved.xyz; để Certbot biết rằng file config này cho domain ant-https.spoved.xyz. Ta được config như sau:
server {
	listen 80 default_server;
	listen [::]:80 default_server;
	root /var/www/html;
	index index.html index.htm index.nginx-debian.html
	server_name ant-https.spoved.xyz;
	location / {
		try_files $uri $uri/ =404;
	}
}
  • Tiếp đến, tự Động Cấu Hình HTTPS với Certbot
sudo certbot --nginx -d ant-https.spoved.xyz
  • Chỉ cần nhập 1 số thông tin tương tự như sau, Let’s Encrypt sẽ tự động tạo certificate và sửa lại file config Nginx
  • Check lại file config, sẽ thấy nó thay đổi:
server {
	root /var/www/html;
	index index.html index.htm index.nginx-debian.html;
	server_name ant-https.spoved.xyz;
	location / {
		try_files $uri $uri/ =404;
	}
    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/ant-https.spoved.xyz/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/ant-https.spoved.xyz/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
    if ($host = ant-https.spoved.xyz) {
        return 301 https://$host$request_uri;
    } # managed by Certbot
	listen 80 default_server;
	listen [::]:80 default_server;
	server_name ant-https.spoved.xyz;
    return 404; # managed by Certbot


}
  • Config bao gồm chuyển hướng HTTP -> HTTPS và thêm các file certificate bao gồm key và crt. Và khi truy cập ant-https.spoved.xyz
  • Như vậy chung ta đã xong làm thế nào để cấu hình HTTPS với Nginx Webserver từ Let’s Encrypt. Lưu ý nhỏ: Let’s Encrypt là nhà cung cấp SSL/TLS miễn phí nên thời hạn của nó là 3 tháng, cần renew lại sau thời gian đó.

Cấu hình HTTP/2???

  • Cách kiểm tra bất kỳ trang web/request nào là HTTP/1.1, HTTP/2 hay HTTP/3 bằng cách: Ở trình duyệt (Chrome chẳng hạn), ấn F12 và click vào Network. Sau đó ở thanh: Name Status Type, nhấp chuột phải và chọn Protocol
  • Sau đó bạn reload lại sẽ thấy các giá trị như:
    • http/1.1: HTTP/1.1
    • h2: HTTP/2
    • h3: HTTP/3
  • Ở trang web trên, hiện đang chỉ là HTTP/1.1
  • Để cấu hình HTTP/2 bằng Nginx, ta thay đổi file config bằng cách sửa giá trị:
    listen 443 ssl http2;
server {
	root /var/www/html;
	index index.html index.htm index.nginx-debian.html;
	server_name ant-https.spoved.xyz;
	location / {
		try_files $uri $uri/ =404;
	}
    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl http2; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/ant-https.spoved.xyz/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/ant-https.spoved.xyz/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
  • Kiểm tra và tải lại Nginx
sudo nginx -t
sudo nginx -s reload
  • Khi này ta tải lại trang web, Protocol sẽ là HTTP/2

Kết luận

Trong bài viết này, chúng ta đã học cách cấu hình HTTPS với Nginx từ Let’s Encrypt và làm thế nào để cấu hình HTTP/2 trên trang web của bạn. HTTPS không chỉ bảo mật dữ liệu mà còn nâng cao uy tín website của bạn. Trong phần tiếp theo, chúng ta sẽ tìm hiểu sâu hơn về HTTP/2, cách cấu hình HTTP/3, tối ưu WebServer và các lợi ích của nó.

Link Series

Avatar photo

Leave a Reply

Your email address will not be published. Required fields are marked *