Cách Tạo Chứng Chỉ SSL Tự Ký cho Nginx trên Centos 7 [Chi Tiết]

Trên nền tảng CentOS 7, việc tạo chứng chỉ SSL tự ký cho máy chủ Nginx không chỉ giúp mã hóa dữ liệu mà còn tăng cường tính bảo mật. Hãy cùng LANIT theo dõi ngay bài viết sau đây để tìm cách tạo chứng chỉ SSL tự ký cho Nginx trên Centos 7 một cách chi tiết và dễ dàng nhé!

Đ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/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
cài đặt chứng chỉ SSL trên Nginx

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:

cài đặt chứng chỉ SSL trên Nginx

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 #
    ##################################
}
Cách Tạo chứng chỉ SSL tự ký cho Nginx trên Centos 7

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 / {

    }

Cách Tạo chứng chỉ SSL tự ký cho Nginx trên Centos 7

#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
Cách Tạo chứng chỉ SSL tự ký cho Nginx trên Centos 7

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é!

avata Hải

Triệu Huyền Trang

Triệu Huyền Trang chuyên gia 3 năm kinh nghiệm trong ngành Công Nghệ, Phần Mềm. Chuyên chia sẻ các kiến thức phần mềm mã nguồn, ứng dụng và thông tin về công nghệ hữu ích.

Chat với chúng tôi qua Zalo!
Chat với chúng tôi qua Zalo!