1. SSL là gì?
SSL (viết tắt của lớp cổng bảo mật) là một giao thức web giúp bảo mật lưu lượng giữa máy chủ và máy khách bằng cách mã hóa nó. Máy chủ và máy khách truyền tải lưu lượng một cách an toàn mà không có nguy cơ thông tin liên lạc bị bên thứ ba diễn giải. Nó cũng giúp khách hàng xác minh danh tính của trang web mà họ đang liên lạc.
2. Cách Config SSL Nginx trong Linux
Cần chuẩn bị:
Đối với bài đăng này, bạn nên có các điều kiện tiên quyết sau:
- Nginx đã được cài đặt trên máy của bạn
- Server được định cấu hình cho tên miền của bạn
- Người dùng có quyền sudo
Bước 1: Tạo chứng chỉ tự ký
Bước đầu tiên của chúng tôi sẽ là tạo chứng chỉ tự ký. Đưa ra lệnh bên dưới trong Terminal để tạo CSR (Yêu cầu ký chứng chỉ) và khóa:
Trong lệnh trên, OpenSSL sẽ tạo hai tệp sau:
- CSR: selfsigned-nginx.crt trong folder /etc/ssl/cert/
- Key: selfsigned-nginx.key trong folder /etc/ssl/private
Bây giờ hãy tạo file dhparam.pem bằng lệnh bên dưới:
Đưa ra lệnh dưới đây trong Terminal để tạo tệp self-signed.conf đoạn cấu hình mới trong /etc/nginx/snippets.
ssl_certificate_key /etc/ssl/private/selfsigned-nginx.key;
ssl_certificate được đặt thành selfsigned-nginx.crt (certificate file) trong khi ssl_certificate_key được đặt thành selfsigned-nginx.key ( key file).
Lưu và đóng tệp self-signed.conf .
Bây giờ chúng ta sẽ tạo một tệp đoạn trích khác ssl-params.conf và định cấu hình một số cài đặt SSL cơ bản. Đưa ra lệnh dưới đây trong Terminal để chỉnh sửa tệp ssl-params.conf :
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
ssl_ecdh_curve secp384r1;
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
# ssl_stapling on;
# ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection “1; mode=block”;
Bước 3: Định cấu hình Nginx để sử dụng SSL
Bây giờ chúng ta sẽ mở tệp cấu hình khối máy chủ Nginx để thực hiện một số cấu hình. Trong bước này, chúng tôi sẽ giả sử bạn đã thiết lập khối máy chủ, khối này sẽ tương tự như sau:
server {
listen 80;
listen [::]:80;
root /var/www/test.org/html;
index index.html index.htm index.nginx-debian.html;
server_name test.org www.test.org;
location / {
try_files $uri $uri/ =404;
}
}
Để mở tệp cấu hình khối máy chủ Nginx, hãy sử dụng lệnh bên dưới:
Bây giờ sửa đổi server hiện có để làm cho nó trông như thế này:
server {
listen 443 ssl;
listen [::]:443 ssl;
include snippets/self-signed.conf;
include snippets/ssl-params.conf;
root /var/www/test.org/html;
index index.html index.htm index.nginx-debian.html;
server_name test.org www.test.org
}
Trong các cấu hình trên, chúng tôi cũng đã thêm các đoạn mã SSL self-signed.conf và ssl-params.conf mà chúng tôi đã cấu hình trước đó.
Tiếp theo, thêm khối máy chủ thứ hai
server {
listen 80;
listen [::]:80;
server_name test.org www.test.org;
return 302 https://$server_name$request_uri;
}
Trong cấu hình trên, return 302 chuyển hướng HTTP sang HTTPS.
Lưu ý : Đảm bảo thay thế test.org bằng tên miền của riêng bạn. Bây giờ hãy lưu và đóng tệp.
Bước 4: Cho phép lưu lượng SSL qua tường lửa
Nếu tường lửa được bật trên hệ thống của bạn, bạn sẽ phải cho phép lưu lượng SSL đi qua nó. Nginx cung cấp cho bạn ba cấu hình khác nhau với ufw. Bạn có thể xem chúng bằng lệnh bên dưới trong Terminal:
Bạn sẽ cần cho phép cấu hình “Nginx Full” trong tường lửa. Để làm như vậy, sử dụng lệnh dưới đây:
Để xác minh xem cấu hình đã được cho phép trong tường lửa hay chưa, hãy sử dụng lệnh bên dưới:
$ sudo ufw status
Bước 5: Kiểm tra tệp cấu hình NGINX
Bây giờ hãy kiểm tra tệp cấu hình Nginx bằng lệnh bên dưới trong Terminal:
$ sudo nginx -t
Bạn sẽ thấy đầu ra dưới đây.
Bây giờ hãy tạo liên kết tượng trưng giữa các trang có sẵn và các trang được kích hoạt:
Sau đó khởi động lại dịch vụ Nginx để áp dụng các thay đổi cấu hình. Sử dụng lệnh dưới đây để làm như vậy:
Bước 6: Kiểm tra SSL
Bây giờ để kiểm tra SSL, hãy điều hướng đến địa chỉ sau:
https://domain -or-địa chỉ IP
Vì chúng tôi đã thiết lập chứng chỉ tự ký, do đó, chúng tôi sẽ thấy cảnh báo rằng kết nối không an toàn. Trang sau xuất hiện khi sử dụng trình duyệt Mozilla Firefox.
Nhấp vào nút Nâng cao .
Nhấp vào Thêm ngoại lệ.
Sau đó nhấp vào Xác nhận ngoại lệ bảo mật.
Bây giờ bạn sẽ thấy trang web HTTPS của mình nhưng có dấu hiệu cảnh báo (khóa có dấu hiệu cảnh báo màu vàng) về tính bảo mật của trang web của bạn.
Ngoài ra, hãy kiểm tra xem chuyển hướng có hoạt động chính xác hay không bằng cách truy cập miền hoặc địa chỉ IP của bạn bằng http.
http://domain -or-địa chỉ IP
Bây giờ, nếu trang web của bạn tự động chuyển hướng đến HTTPS, điều này có nghĩa là chuyển hướng đã hoạt động bình thường. Để định cấu hình chuyển hướng vĩnh viễn, hãy chỉnh sửa tệp cấu hình khối máy chủ bằng lệnh bên dưới trong Terminal:
Bây giờ thay đổi return 302 thành return 301 trong tệp, sau đó lưu và đóng tệp.
Đó là cách bạn có thể thiết lập SSL cho Nginx trong hệ thống Debian 10. Chúng tôi đã thiết lập chứng chỉ tự ký để trình diễn. Nếu bạn đang ở trong môi trường sản xuất, hãy luôn lấy chứng chỉ CA.