Cài đặt chứng chỉ SSL trên NGINX để bật HTTPS

Người dùng cần chuẩn bị sẵn tệp chứng chỉ số (SSL/TLS certificate) trước khi thực hiện các bước cấu hình. Nếu chưa có chứng chỉ, có thể đăng ký offered miễn phí 90 ngày tại https://www.sslforfree.com.

Sau khi tải về, bộ chứng chỉ thường gồm ba tệp:

  • certificate.crt: Chứng chỉ do server CN (Common Name) cấp.
  • ca_bundle.crt: Chuỗi chứng chỉ xác thực gốc (Certificate Authority Bundle).
  • private.key: Khóa riêng tư tương ứng với CSR khi đăng ký.

Tạo thư mục chứa chứng chỉ trên server NGINX:

sudo mkdir -p /etc/ssl/certs
sudo chmod 700 /etc/ssl/certs

Copy ba tệp trên vào thư mục /etc/ssl/certs (riêng private.key nên lưu riêng với chế độ bảo mật cao hơn):

sudo cp certificate.crt /etc/ssl/certs/
sudo cp ca_bundle.crt /etc/ssl/certs/
sudo cp private.key /etc/ssl/certs/
sudo chmod 600 /etc/ssl/certs/private.key

Tạo tệp tổng hợp chứng chỉ cho NGINX. Cần nối certificate.crtca_bundle.crt theo đúng thứ tự:

cat /etc/ssl/certs/certificate.crt /etc/ssl/certs/ca_bundle.crt | sudo tee /etc/ssl/certs/server-full.crt

Chỉnh sửa cấu hình NGINX:

Sao lưu file cấu hình:

sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup

Chỉnh sửa /etc/nginx/nginx.conf (hoặc tệp cấu hình site riêng trong /etc/nginx/sites-available/ nếu dùng ổ cắm virtual host riêng), thêm khối server mới:

http {
    # ... các thiết lập khác ...

    server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        
        server_name example.com www.example.com;

        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
        ssl_prefer_server_ciphers on;

        ssl_certificate     /etc/ssl/certs/server-full.crt;
        ssl_certificate_key /etc/ssl/certs/private.key;

        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 10m;

        root /var/www/html;
        index index.html index.htm;

        location / {
            try_files $uri $uri/ =404;
        }
    }
}

Lưu ý: Đảm bảo đường dẫn tới các tệp .crt.key chính xác, tránh lỗi ssl_certificate. Thay example.com bằng tên miền thực tế. Cấu hình trên là phương án đưa app HTTP gốc chạy cùng nền, không cần reverse proxy tới puerto 80.

Kiểm tra cấu hình NGINX và khởi động lại:

sudo nginx -t
sudo systemctl reload nginx

Cập nhật firewall nếu cần:

sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'

Để kiểm tra hiệu lực SSL:

curl -I https://example.com
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509 -noout -dates

Thẻ: nginx ssl tls HTTPS certificate

Đăng vào ngày 15 tháng 7 lúc 22:22