Bảo mật luôn là yếu tố quan trọng trong việc triển khai các ứng dụng web. HTTPS (HTTP over SSL/TLS) là phương pháp phổ biến nhất để bảo vệ dữ liệu trao đổi giữa client và server. Trong nội dung của series này, chúng ta sẽ tìm hiểu cách cấu hình HTTPS với Nginx Webserver bằng việc tạo chứng chỉ tự ký (self-signed certificate)
Cấu hình HTTPS với Nginx
Cài đặt SSL/TLS với Self-signed certificate (Chứng chỉ tự ký)
- Create folder chứa file SSL/TLS:
sudo mkdir -p /etc/nginx/ssl
- Tạo chứng chỉ SSL/TLS tự ký bằng lệnh sau (giả sử domain tự ký là:
test.domain.com
):
cd /etc/nginx/ssl # vào folder chứa file SSL/TLS
sudo openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes -keyout test.domain.com.key -out test.domain.com.crt -subj "/CN=test.domain.com." -addext "subjectAltName=DNS:test.domain.com,DNS:*.test.dom
ain.com"
Trong đó những điều cần chú ý:
- -days: Số ngày chứng chỉ valid (ở đây là 3650 ngày)
- -keyout: Private key của chứng chỉ
- -crt: Chứng chỉ (chúng ta sẽ add vào browser sau)
- -subj: Thông tin tạo trong đó có tên miền – CN(Common Name)
Cấu hình SSL/TLS trong Nginx
- Mở cấu hình cũ hoặc tạo 1 config mới riêng cho domain
sudo vim /etc/nginx/sites-available/test-domain.conf
- Thêm cấu hình sau để kích hoạt HTTPS:
server {
listen 443 ssl;
server_name test.domain.com;
ssl_certificate /etc/nginx/ssl/test.domain.com.crt;
ssl_certificate_key /etc/nginx/ssl/test.domain.com.key;
location / {
root /var/www/html;
index index.html;
}
}
# Cấu hình dưới đây để chuyển hướng HTTP sang HTTPS
server {
listen 80;
server_name localhost;
return 301 https://$host$request_uri;
}
- Kiểm tra và tải lại Nginx
sudo nginx -t
sudo systemctl reload nginx
Kiểm tra với chứng chỉ tự ký
- Để có thể phân giải tên miền
test.domain.com
, chúng ta cần thêm nó vào filehosts
- Đối với Windows: `C:\Windows\System32\drivers\etc\hosts, (cần phải thêm quyền để có thể edit) thêm vào như sao
127.0.0.1 test.domain.com
- Sau đó dùng browser để trỏ tới nó:
http://test.domain.com/
. Bạn sẽ thấy nó redirect sanghttps://test.domain.com/
và hiển thị:
Bạn vẫn có thể Proceed to test.domain.com (unsafe) để access vào nó
Để Browser có thể chứng thực được chứng chỉ, xoá Not secure
chúng ta cần add chứng chỉ đã tạo vào Browser: Settings -> Search: certificate-manager
Chọn vào thanh Trusted Root Certification Authorities
và import vào chứng chỉ đã tạo ở /etc/nginx/ssl/test.domain.com.crt
Sau khi import thành công, tắt Browser và bật lại
Ở đây chứng chỉ có thời hạn là 3650 ngày. Chúng ta đã hoàn thành cài đặt HTTPS với SSL/TLS Self-Certificate