Điều kiện cần chuẩn bị
Trước khi bắt đầu cài đặt chứng chỉ SSL trên Nginx trên hệ điều hành Centos 7, bạn cần chuẩn bị các yêu cầu sau đây:
- Máy chủ CentOS 7: Đảm bảo rằng bạn đã có một máy chủ CentOS 7 đã cài đặt Nginx và được kết nối với mạng.
- Cài đặt OpenSSL: Bạn cần cài đặt OpenSSL bởi vì công cụ này được sử dụng để tạo chứng chỉ SSL tự ký.
- SSH truy cập: Hãy đảm bảo rằng bạn có quyền truy cập vào máy chủ thông qua SSH, hoặc bạn đang làm việc trên terminal trực tiếp trên máy chủ.
4 bước tạo chứng chỉ SSL tự ký cho Nginx trên Centos 7 Chi Tiết
Dưới đây là các bước cài đặt SSL cho Nginx trên CentOS 7, bạn có thể theo dõi và áp dụng vào hệ thống của mình nhé!
Bước 1: Tạo chứng chỉ SSL
TLS/SSL hoạt động bằng cách kết hợp khóa công khai và key private. Khóa SSL được giữ bí mật hoàn toàn trên máy chủ và dùng để mã hóa dữ liệu gửi tới client. Chứng chỉ SSL được chia sẻ khóa công khai cho người yêu cầu nội dung và giúp giải mã nội dung đã được ký bởi khóa SSL.
Thư mục /etc/ssl/certs bao gồm chứng chỉ công khai. Và bạn cần tạo thư mục /etc/ssl/private để chứa khóa riêng tư để đảm bảo tính bảo mật cao. Để hạn chế quyền truy cập để ngăn truy cập trái phép bạn có thể sử dụng lệnh sau đây:
sudo mkdir /etc/ssl/private
sudo chmod 700 /etc/ssl/private
Tiếp theo, bạn hãy tạo cùng một lúc cặp khóa và chứng chỉ tự ký với OpenSSL bằng một lệnh đơn giản sau đây:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt
Trong khi quá trình này diễn ra, bạn cần trả lời một số câu hỏi. Trong đó:
- sudo: Sử dụng quyền quản trị để thực thi lệnh với đặc quyền cao hơn (nếu đúng ở user root thì có thể bỏ qua sudo).
- openssl: Công cụ dòng lệnh OpenSSL để thực hiện các thao tác liên quan đến mã hóa và bảo mật.
- req: là một tập lệnh mã nguồn mở được dùng để tạo và quản lý các yêu cầu chứng chỉ (Certificate Signing Request – CSR)
- -x509: Lệnh này được dùng để chỉ định rằng bạn đang tạo một chứng chỉ tự ký (self-signed certificate) loại X.509
- -nodes: lệnh này được dùng khi tạo khóa riêng tư để chỉ định rằng bạn không muốn bảo vệ khóa riêng tư bằng mật khẩu. Hiểu đơn giản nghĩa là khóa riêng tư sẽ được tạo ra mà không yêu cầu mật khẩu để truy cập vào nó.
- -days 365: Lệnh này có nghĩa là chứng chỉ sẽ có hiệu lực trong vòng 365 ngày kể từ ngày tạo. Sau khi thời gian này kết thúc, bạn sẽ cần cập nhật lại chứng chỉ để duy trì tính bảo mật và sự tin cậy.
- -newkey rsa:2048: Tạo một cặp khóa mới với thuật toán RSA và độ dài khóa 2048 bit.
- -keyout /etc/ssl/private/nginx-selfsigned.key: Lưu trữ khóa riêng tư vào đường dẫn /etc/ssl/private/nginx-selfsigned.key
- -out /etc/ssl/certs/nginx-selfsigned.crt: Lưu trữ chứng chỉ tự ký vào đường dẫn /etc/ssl/certs/nginx-selfsigned.crt
Trên đây là toàn bộ những tùy chọn dùng tạo khóa và chứng chỉ. Trong quá trình tạo, bạn sẽ được hỏi về thông tin của máy chủ để điền vào chứng chỉ. Một chú ý là bạn hãy trả lời đúng các câu hỏi này. Điều quan trọng nhất là phần “Common Name” (ví dụ: tên miền hoặc địa chỉ IP). Hãy nhập tên miền được kết nối với máy chủ hoặc địa chỉ IP công khai của máy chủ.
Khi bạn hoàn thành các bước trên, tệp khóa riêng tư (nginx-selfsigned.key) và tệp chứng chỉ công khai (nginx-selfsigned.crt) sẽ được lưu trong thư mục /etc/ssl/private và /etc/ssl/certs.
Bước cuối cùng, bạn cần tạo một khóa Diffie-Hellman mạnh để sử dụng trong việc thỏa thuận Perfect Forward Secrecy với các máy khách. Để tạo khóa Diffie-Hellman, bạn có thể sử dụng lệnh sau đây:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Trong đó:
- sudo: Sử dụng quyền quản trị để thực thi lệnh với đặc quyền cao hơn.
- openssl: Công cụ dòng lệnh OpenSSL để thực hiện các thao tác liên quan đến mã hóa và bảo mật.
- dhparam: Tạo tham số Diffie-Hellman.
- -out /etc/ssl/certs/dhparam.pem: Lưu trữ tham số DH vào đường dẫn /etc/ssl/certs/dhparam.pem.
- 2048: Độ dài khóa của tham số Diffie-Hellman, trong trường hợp này là 2048 bit.
Quá trình này có thể mất một vài phút bạn vui lòng đợi. Khi hoàn thành, bạn sẽ có một khóa Diffie-Hellman mạnh tại /etc/ssl/certs/dhparam.pem có thể sử dụng trong cấu hình Nginx của bạn.
Bước 2: Cấu hình Nginx sử dụng chứng chỉ SSL
Cấu hình mặc định của Nginx trên CentOS thường không có cấu trúc rõ ràng. Server block HTTP mặc định được lưu trong tệp cấu hình chính. Để cấu hình server block cho nội dung sử dụng các tệp chứng chỉ bạn đã tạo, bạn cần tạo một tệp mới trong thư mục /etc/nginx/conf.d. Hoặc bạn có thể tùy chọn cấu hình server block mặc định để chuyển hướng yêu cầu HTTP sang HTTPS.
#1. Tạo server block TLS/SSL
Để tạo server block sử dụng TLS/SSL, bạn thực hiện các bước sau:
Đầu tiên, bạn cần tạo và mở tệp ssl.conf trong thư mục /etc/nginx/conf.d:
sudo vi /etc/nginx/conf.d/ssl.conf
Trong tệp ssl.conf, bạn bắt đầu bằng việc tạo một server block. Theo mặc định, kết nối TLS/SSL sử dụng cổng 443, vì vậy bạn cần đặt cổng nghe là 443. Hãy chọn server_name là tên miền hoặc địa chỉ IP mà bạn đã sử dụng làm Common Name khi tạo chứng chỉ SSL. Bước tiếp theo, hãy sử dụng các chỉ thị ssl_certificate, ssl_certificate_key và ssl_dhparam để chỉ định vị trí của các tệp chứng chỉ SSL bạn đã tạọ, bằng cách sử dụng lệnh như hình sau đây:
Tiếp theo, bạn hãy bổ sung thêm các tùy chọn SSL để tăng cường bảo mật cho trang web. Bạn có thể sử dụng các khuyến nghị từ Cipherlist.eu để cấu hình tùy chọn này. Lưu ý rằng sự lựa chọn của bạn sẽ phụ thuộc vào nhu cầu hỗ trợ của client, hãy tham khảo lệnh sau đây:
server {
listen 443 http2 ssl;
listen [::]:443 http2 ssl;
server_name your_server_ip;
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_protocols TLSv1.3; # Requires nginx >= 1.13.0 else use TLSv1.2
ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+AESGCM:EDH+AESGCM;
ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off; # Requires nginx >= 1.5.9
ssl_stapling on; # Requires nginx >= 1.3.7
ssl_stapling_verify on; # Requires nginx => 1.3.7
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# More SSL options here from Cipherlist.eu
##################################
# END https://cipherlist.eu/ BLOCK #
##################################
}
Bước cuối cùng, bạn thêm phần còn lại của cấu hình Nginx cho trang web của bạn, bao gồm cấu hình location block và các trang lỗi như sau:
server {
listen 443 http2 ssl;
listen [::]:443 http2 ssl;
server_name your_server_ip;
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_protocols TLSv1.3; # Requires nginx >= 1.13.0 else use TLSv1.2
ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+AESGCM:EDH+AESGCM;
ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off; # Requires nginx >= 1.5.9
ssl_stapling on; # Requires nginx >= 1.3.7
ssl_stapling_verify on; # Requires nginx => 1.3.7
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# More SSL options here from Cipherlist.eu
##################################
# END https://cipherlist.eu/ BLOCK #
##################################
root /usr/share/nginx/html;
location / {
}
#2. Tạo chuyển hướng từ HTTP sang HTTPS
Để đảm bảo tính an toàn cho trang web, bạn cần làm cho Nginx tự động chuyển hướng các yêu cầu từ HTTP sang HTTPS. Để làm điều này, thêm đoạn mã sau vào tệp cấu hình ssl.conf như dưới đây:
server {
listen 80;
listen [::]:80;
server_name địa_chỉ_ip_của_bạn;
return 301 https://$host$request_uri;
}
Sau khi thêm mã trên, bạn cần Lưu và đóng tệp cấu hình. Lúc này máy chủ HTTP trên cổng 80 sẽ tự động chuyển hướng mọi yêu cầu đến máy chủ HTTPS. Như vậy, tất cả các yêu cầu từ HTTP sẽ tự động được chuyển hướng sang HTTPS giúp tăng cường tính bảo mật cho trang web.
Bước 3: Áp dụng các thay đổi trong Nginx
Để áp dụng cấu hình mới, bạn cần khởi động lại dịch vụ Nginx. Trước tiên, hãy kiểm tra xem các tệp cấu hình có lỗi cú pháp không. Bằng cách sử dụng lệnh sau:
sudo nginx -t
Nếu hoàn thành bước trên mà không có lỗi nào, bạn sẽ nhận được kết quả như sau:
Output
nginx: [warn] “ssl_stapling” ignored, issuer certificate not found
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Lưu ý: Bạn sẽ nhận được thông báo cảnh báo ở đầu kết quả, tuy nhiên đây chỉ là một cảnh báo về việc không tìm thấy chứng chỉ phát hành (issuer certificate) cho tính năng SSL stapling sẽ không ảnh hưởng đến tính bảo mật của trang web.
bạn có thể khởi động lại Nginx để thực hiện các thay đổi đã cấu hình:
sudo systemctl restart nginx
Sau khi thực hiện lệnh trên, Nginx sẽ được khởi động lại và bạn chỉ áp dụng các cài đặt SSL mới mà bạnđã thiết lập.
Bước 4: Kiểm tra mã hóa
Để kiểm tra mã hóa bảo mật, trên trình duyệt bạn có thể nhập cú pháp như sau::
https://server_domain_or_IP
Sau đó hệ thống, sẽ hiển thị cảnh báo về chứng chỉ không được phê duyệt. Bạn hãy nhấp “ADVANCED” và truy cập máy chủ. Sau đó, bạn tiếp tục vào trang web của bạn. Mặc dù chứng chỉ không được xác minh, kết nối vẫn được mã hóa.
Nếu bạn đã cấu hình Nginx tự động chuyển hướng HTTP sang HTTPS, thì bạn có thể kiểm tra bằng cách nhập như sau:
http://server_domain_or_IP
Nếu kết quả tương tự như trên, vậy chuyển hướng đã được cài đặt thành công.
Nếu bạn đã nắm rõ cách cài đặt chứng chỉ SSL trên Nginx, thì hãy liên hệ với LANIT ngay hôm nay để mua SSL và bắt đầu hành trình an toàn trực tuyến của bạn!
Lời kết
Bài viết trên đây là toàn bộ các bước hướng dẫn tạo chứng chỉ SSL tự ký cho Nginx trên CentOS 7. Bạn chỉ cần làm đúng các bước trên bạn chắc chắn sẽ cài đặt thành công. Nếu có bất kỳ thắc mắc nào hãy dể lại bình luận hoặc liên hệ LANIT ngay để được giải đáp ngay lập tức nhé!