NỘI DUNG

Hosting tốc độ cao Vietnix - tốc độ tải trang trung bình dưới 1 giây
VPS siêu tốc Vietnix - trải nghiệm mượt mà, ổn định
15/05/2023
Lượt xem

Hướng dẫn tạo chứng chỉ SSL tự ký cho Nginx trên CentOS 7

15/05/2023
18 phút đọc
Lượt xem

Đánh giá

5/5 - (81 bình chọn)

TLS (transport layer security) và SSL (secure sockets layer) là các giao thức web được sử dụng để bọc lớp bảo mật, mã hóa thông tin giao dịch truyền tải qua mạng. Trong bài viết hướng dẫn tạo chứng chỉ SSL tự ký cho Nginx trên CentOS 7 này, bạn sẽ được hướng dẫn cách thiết lập một chứng chỉ SSL Self-Signed sử dụng với web server Nginx trên CentOS 7.

Giới thiệu về chứng chỉ SSL

Khi sử dụng chứng chỉ SSL, server có thể gửi traffic an toàn với client mà không cần phải lo lắng bị chặn bởi bên thứ 3. Hệ thống chứng chỉ cũng hỗ trợ người dùng trong việc xác minh danh tính trang web mà họ đang kết nối.

Lưu ý: Chứng chỉ Self-Signed sẽ mã hóa thông tin giao tiếp giữa server và client. Tuy nhiên, người dùng không thể sử dụng chứng chỉ này để tự động xác minh danh tính server của mình. Do đó, người dùng sẽ thấy một lỗi bảo mật khi truy cập vào trang web của mình.

Vì hạn chế này mà chứng chỉ Self-Signed không phù hợp cho lượng lớn người sử dụng. Chứng chỉ này thường được sử dụng để kiểm tra hoặc bảo vệ các dịch vụ không quan trọng được sử dụng bởi một người dùng hoặc một nhóm người dùng nhỏ.

Chứng chỉ SSL
Chứng chỉ SSL

Yêu cầu để tạo chứng chỉ SSL tự ký cho Nginx trên CentOS 7

  • Một máy chủ CentOS với một người dùng non-root có quyền sudo.
  • Nginx đã được cài đặt trên máy chủ.

Khi bạn đã có đầy đủ các yêu cầu, hãy đăng nhập vào máy chủ của mình với tư cách người dùng sudo.

Bước 1: Tạo chứng chỉ SSL

TLS/SSL hoạt động bằng cách kết hợp giữa chứng chỉ công khai và khóa riêng tư. Khóa SSL được giữ bí mật trên server. Khoá này được sử dụng để mã hóa nội dung gửi đến client. Chứng chỉ SSL được chia sẻ công khai với những ai yêu cầu nội dung. Chứng chỉ này được sử dụng để decrypt nội dung được signed bởi khóa SSL liên quan.

Thư mục /etc/ssl/certs có thể được sử dụng để chứa chứng chỉ công khai nên đã tồn tại trên máy chủ. Bạn cần tạo thư mục /etc/ssl/private để chứa file khóa riêng tư. Tính bảo mật của khóa này rất quan trọng. Vì vậy, bạn cần khóa quyền truy cập để ngăn chặn những truy cập trái phép:

sudo mkdir /etc/ssl/private  sudo chmod 700 /etc/ssl/private

Bây giờ, bạn có thể tạo một cặp khóa và chứng chỉ Self-Signed với OpenSSL chỉ bằng một lệnh:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt

Bạn sẽ được hỏi một loạt câu hỏi. Trước khi đi vào chi tiết, hãy xem trong lệnh trên có những gì:

  • openssl: Đây là công cụ command line cơ bản để tạo và quản lý chứng chỉ OpenSSL, khóa và các file khác.
  • req: Lệnh phụ này chỉ định rằng bạn muốn sử dụng chứng chỉ signing request (CSR) X.509. “X.509” là một tiêu chuẩn cơ sở khóa công khai SSL và TLS tuân thủ theo để quản lý khóa và chứng chỉ. Bạn muốn tạo một chứng chỉ X.509 mới nên bạn đang sử dụng lệnh phụ này.
  • -x509: Sửa đổi lệnh phụ trước đó bằng cách cho tiện ích biết rằng bạn muốn tạo một chứng chỉ Self-Signed thay vì tạo một chứng chỉ cần yêu cầu chứng thực (signing request).
  • -nodes: Cho OpenSSL biết bỏ qua tùy chọn để bảo vệ chứng chỉ của bạn bằng mật khẩu. Bạn cần Nginx có thể đọc file khi máy chủ khởi động mà không cần sự can thiệp của người dùng. Mật khẩu sẽ ngăn điều này xảy ra vì bạn phải nhập mật khẩu sau mỗi lần khởi động lại.
  • -days 365: Tùy chọn này thiết lập thời gian chứng chỉ tồn tại hợp lệ. Ở đây bạn thiết lập là một năm.
  • -newkey rsa:2048: Chỉ định bạn muốn tạo một chứng chỉ mới và một khóa mới cùng một lúc. Bạn không tạo khóa được yêu cầu để ký chứng chỉ trong bước trước. Vì vậy bạn cần phải tạo khoá cùng với chứng chỉ. Phần rsa:2048 cho biết tạo một khóa RSA có độ dài 2048 bit.
  • -keyout: Dòng này cho OpenSSL biết nơi để đặt file khóa riêng tư mà bạn tạo ra.
  • -out: Cho OpenSSL biết nơi đặt chứng chỉ SSL bạn đang tạo.

Các tùy chọn này sẽ tạo ra cả file khóa và chứng chỉ. Bạn sẽ được hỏi một vài câu hỏi về máy chủ để nhúng thông tin chính xác nhất vào chứng chỉ.

Bạn hãy điền các câu trả lời phù hợp. Dòng quan trọng nhất là yêu cầu Common Name (ví dụ: máy chủ FQDN hoặc tên của bạn). Bạn cần nhập tên miền liên kết với máy chủ của bạn hoặc địa chỉ IP công khai của máy chủ.

Toàn bộ câu hỏi sẽ có dạng như thế này:

Output Country Name (2 letter code) [XX]:US State or Province Name (full name) []:Example Locality Name (eg, city) [Default City]:Example  Organization Name (eg, company) [Default Company Ltd]:Example Inc Organizational Unit Name (eg, section) []:Example Dept Common Name (eg, your name or your server's hostname) []:your_domain_or_ip Email Address []:webmaster@example.com

Cả hai file mà bạn đã tạo sẽ được đặt trong các thư mục con thích hợp của thư mục /etc/ssl.

Khi sử dụng OpenSSL, bạn cũng nên tạo một nhóm Diffie-Hellman mạnh được sử dụng trong Perfect Forward Secrecy với các client.

Bạn có thể tạo Diffie-Hellman bằng cách gõ:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Quá trình này có thể mất vài phút. Nhưng khi hoàn tất, bạn sẽ có một nhóm DH mạnh tại /etc/ssl/certs/dhparam.pem mà bạn có thể sử dụng trong cấu hình.

Để tạo chứng chỉ SSL Self-Signed cho Nginx trên CentOS 7, bạn cần có một máy chủ CentOS 7 có cấu hình phù hợp. Nếu chưa có máy chủ để triển khai, bạn có thể tham khảo lựa chọn các gói VPS tại Vietnix.

Vietnix hiện đang cung cấp nhiều gói VPS có đa dạng cấu hình và giá cả phù hợp như VPS Giá Rẻ, VPS Phổ Thông, VPS Cao Cấp và VPS NVMe. 97% khách hàng đã sử dụng VPS tại Vietnix đều có phản hồi tích cực, đánh giá VPS có tốc độ cao, luôn hoạt động ổn định, backup tự động hàng tuần, hỗ trợ nhiều hệ điều hành (trong đó có CentOS 7), quản trị đơn giản.

Đặc biệt, khi thuê VPS tại Vietnix, khách hàng còn được tặng theme & plugin WordPress trị giá lên đến 50.000.000 VND. Để biết thêm thông tin chi tiết, hãy liên hệ với Vietnix ngay.

Bước 2: Cấu hình Nginx sử dụng SSL

Cấu hình mặc định của Nginx trên CentOS khá không có cấu trúc. Server block HTTP đặt mặc định trong file cấu hình chính. Nginx sẽ kiểm tra các file kết thúc bằng .conf trong thư mục /etc/nginx/conf.d để tìm cấu hình bổ sung.

Bạn sẽ tạo một file mới trong thư mục này để cấu hình server block cung cấp nội dung bằng các file chứng chỉ mà bạn đã tạo. Sau đó, 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.

Tạo server block TLS/SSL

Tạo và mở file ssl.conf trong thư mục /etc/nginx/conf.d:

sudo vi /etc/nginx/conf.d/ssl.conf

Ở bên trong, bắt đầu bằng cách mở một server block. Theo mặc định, kết nối TLS/SSL sử dụng cổng 443. Vì vậy đó sẽ là cổng listen của bạn. server_name nên được đặt là tên miền của máy chủ hoặc địa chỉ IP mà bạn sử dụng làm Common Name khi tạo chứng chỉ của mình. Tiếp theo, sử dụng các chỉ thị ssl_certificate, ssl_certificate_keyssl_dhparam để đặt vị trí của file SSL bạn đã tạo:

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; }

Thêm một số tùy chọn SSL bổ sung để tăng cường bảo mật cho trang web. Tùy chọn bạn sẽ sử dụng là các khuyến nghị từ Cipherlist.eu. Trang web cung cấp các cài đặt mã hóa dễ hiểu và áp dụng được cho các phần mềm phổ biến.

Lưu ý: Thiết lập mặc định được đề xuất trên Cipherlist.eu cung cấp bảo mật mạnh. Tuy nhiên, đôi khi điều này sẽ làm giảm tính tương thích của client. Nếu muốn hỗ trợ client cũ hơn, bạn có thể sử dụng một danh sách thay thế có tính tương thích cao hơn. Hãy nhấp vào liên kết được ghi là “Yes, give me a ciphersuite that works with legacy / old software.”

Danh sách tương thích có thể được sử dụng thay vì các đề xuất mặc định. Sự lựa chọn của bạn sẽ phụ thuộc chủ yếu vào những gì bạn cần hỗ trợ.

Có một vài phần trong cấu hình có thể bạn muốn chỉnh sửa. Trước tiên, bạn có thể thêm bộ giải quyết DNS ưu tiên cho các yêu cầu upstream vào chỉ thị resolver. Bạn đã sử dụng của Google trong bài viết này, nhưng bạn có thể thay đổi nếu bạn có sở thích khác.

Bạn nên tìm hiểu về HTTP Strict Transport Security hoặc HSTS, cụ thể là chức năng “preload”. Preloading HSTS cung cấp bảo mật tăng cao, tuy nhiên nếu kích hoạt không đúng cách có thể gây ra hậu quả lớn. Trong bài viết này, bạn sẽ không kích hoạt preload nhưng có thể sửa đổi nếu đã hiểu rõ những ảnh hưởng của nó.

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;      ########################################################################     # from https://cipherlist.eu/                                            #     ########################################################################          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;     # Disable preloading HSTS for now.  You can use the commented out header line that includes     # the "preload" directive if you understand the implications.     #add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";     add_header X-Frame-Options DENY;     add_header X-Content-Type-Options nosniff;     add_header X-XSS-Protection "1; mode=block";     ##################################     # END https://cipherlist.eu/ BLOCK #     ################################## }

Do đang dùng chứng chỉ Self-Signed nên SSL stapling sẽ không được sử dụng. Nginx sẽ đưa ra một cảnh báo tắt tính năng stapling cho chứng chỉ Self-Signed và tiếp tục hoạt động bình thường.

Cuối cùng, thêm phần còn lại của cấu hình Nginx cho trang web của bạn. Điều này sẽ khác nhau tùy thuộc vào nhu cầu của bạn. Bạn chỉ cần sao chép một số chỉ thị được sử dụng trong location block mặc định cho ví dụ. Điều này sẽ thiết lập thư mục root và một số trang lỗi:

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;      ################################################################     # from https://cipherlist.eu/                                            #     ################################################################          . . .          ##################################     # END https://cipherlist.eu/ BLOCK #     ##################################      root /usr/share/nginx/html;      location / {     }      error_page 404 /404.html;     location = /404.html {     }      error_page 500 502 503 504 /50x.html;     location = /50x.html {     } }

Khi hoàn thành, bạn lưu lại và thoát. Cấu hình Nginx sử dụng chứng chỉ SSL để mã hóa lưu lượng. Các tùy chọn SSL được chỉ định đảm bảo chỉ các giao thức và cipher an toàn nhất được sử dụng. Lưu ý rằng cấu hình ví dụ này chỉ phục vụ trang mặc định của Nginx. Vì vậy bạn có thể muốn sửa đổi cấu hình để đáp ứng nhu cầu của mình.

Tạo một chuyển hướng từ HTTP sang HTTPS (Tùy chọn)

Với cấu hình hiện tại của bạn, Nginx sẽ phản hồi với nội dung được mã hóa cho các yêu cầu trên cổng 443. Nội dung phản hồi không được mã hóa cho các yêu cầu trên cổng 80 vì trang web của bạn không yêu cầu sử dụng cổng 80. Điều này có thể làm giảm độ an toàn của trang web, đặc biệt là khi trang web chứa thông tin nhạy cảm như mật khẩu.

File cấu hình Nginx mặc định cho phép thêm chỉ thị vào server block mặc định của cổng 80. Bạn có thể làm thêm đoạn mã sau vào đầu file ssl.conf:

server {     listen 80;     listen [::]:80;     server_name your_server_ip;     return 301 https://$host$request_uri; }  . . .

Sau khi thực hiện các bước cấu hình này, bạn cần lưu và đóng file cấu hình. Công việc này sẽ cấu hình máy chủ HTTP trên cổng 80 để tự động chuyển hướng các yêu cầu đến máy chủ HTTPS. Khi làm như vậy, tất cả các yêu cầu HTTP sẽ được tự động chuyển hướng sang HTTPS, giúp tăng độ an toàn của trang web.

Bước 3: Kích hoạt các thay đổi trong Nginx

Khởi động lại Nginx để triển khai cấu hình mới.

Trước tiên, bạn nên kiểm tra xem không có lỗi cú pháp trong các file cấu hình. Kiểm tra bằng cách nhập:

sudo nginx -t

Nếu không có lỗi gì bạn sẽ nhận được kết quả giống 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

Chú ý đến cảnh báo ở đầu trang. Như đã đề cập trước đó, thiết lập này đưa ra một cảnh báo vì chứng chỉ self-signed không thể sử dụng SSL stapling. Máy chủ của bạn vẫn có thể mã hóa kết nối một cách chính xác.

Nếu output của bạn giống như trên, file cấu hình của bạn không có lỗi cú pháp. Bạn có thể khởi động lại Nginx để triển khai các thay đổi của mình:

sudo systemctl restart nginx

Nginx sẽ được khởi động lại và triển khai các thiết lập SSL mà bạn đã cấu hình.

Bước 4: Thử nghiệm mã hóa

Mở trình duyệt web và nhập https:// theo sau bởi tên miền hoặc địa chỉ IP của máy chủ vào thanh địa chỉ:

https://server_domain_or_IP

Chứng chỉ bạn tạo không được ký bởi một trong các cơ quan chứng nhận uy tín của trình duyệt. Do đó, bạn sẽ có thể thấy một cảnh báo giống như sau:

Cảnh báo sự uy tín của chứng chỉ
Cảnh báo sự uy tín của chứng chỉ

Thông báo này là bình thường. Bạn chỉ cần quan tâm đến khía cạnh mã hóa của chứng chỉ. Nhấp vào “ADVANCED” và sau đó nhấp vào liên kết được cung cấp để tiếp tục truy cập vào máy chủ:

Nhấp vào ADVANCED sau đó truy cập liên kết bình thường
Nhấp vào ADVANCED sau đó truy cập liên kết bình thường

Sau khi làm theo các bước trên, bạn sẽ được chuyển đến trang web của mình. Nếu nhìn vào thanh địa chỉ trên trình duyệt bạn sẽ thấy một biểu tượng chỉ ra rằng kết nối chỉ bảo mật một phần. Biểu tượng này có thể là một cái khóa với dấu “x” hoặc một tam giác có dấu chấm than. Chứng chỉ không thể được xác minh. Tuy nhiên, kết nối vẫn được mã hóa.

Nếu bạn đã cấu hình Nginx để chuyển hướng các yêu cầu HTTP sang HTTPS, bạn cũng có thể kiểm tra xem chuyển hướng hoạt động đúng không bằng cách truy cập vào địa chỉ:

http://server_domain_or_IP

Nếu kết quả giống như biểu tượng trên thì có nghĩa là chuyển hướng đã được cấu hình đúng.

Nếu bạn đã nắm rõ cách tạo chứng chỉ SSL Self-Signed cho Nginx trên CentOS 7, thì liên hệ ngay với Vietnix để được tư vấn về việc chọn gói VPS thích hợp và triển khai theo hướng dẫn.

Vietnix là đơn vị uy tín hàng đầu tại Việt Nam hiện nay với 10 năm kinh nghiệm trong lĩnh vực cung cấp dịch vụ VPS. Trong suốt thời gian hoạt động, Vietnix đã đồng hành cùng sự thành công của hơn 50.000 khách hàng trong và ngoài nước, một số đơn vị tiêu biểu phải kể đến như iVIVU.com, Vietnamwork, KINGFOOD, UBGroup, GTV,…

Nhờ không ngừng nâng cao chất lượng, mang đến sự hài lòng cho khách hàng, Vietnix đã nhận được giải thưởng Thương hiệu Việt Nam xuất sắc năm 2022.

Chỉ cần bạn cho biết nhu cầu, Vietnix sẽ tư vấn giải pháp phù hợp với bạn. Đừng ngần ngại liên hệ với Vietnix theo thông tin dưới đây để được hỗ trợ.

  • Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh
  • Hotline: 1800 1093 – 07 088 44444
  • Email: sales@vietnix.com.vn

Lời kết 

Trên đây là các bước hướng dẫn tạo chứng chỉ SSL tự ký cho Nginx trên CentOS 7. Chúc các bạn thực hiện thành công. Nếu có thắc mắc gì trong quá trình thao tác, bạn có thể để lại bình luận ở bên dưới Vietnix sẽ hỗ trợ giải đáp cho bạn.

THEO DÕI VÀ CẬP NHẬT CHỦ ĐỀ BẠN QUAN TÂM

Đăng ký ngay để nhận những thông tin mới nhất từ blog của chúng tôi. Đừng bỏ lỡ cơ hội truy cập kiến thức và tin tức hàng ngày

Chọn chủ đề :

Hưng Nguyễn

Co-Founder
tại

Kết nối với mình qua

Kết nối với mình qua

Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận

Tăng tốc độ website - Nâng tầm giá trị thương hiệu

Tăng tốc tải trang

95 điểm

Nâng cao trải nghiệm người dùng

Tăng 8% tỷ lệ chuyển đổi

Thúc đẩy SEO, Google Ads hiệu quả

Tăng tốc ngay

SẢN PHẨM NỔI BẬT

7 NGÀY DÙNG THỬ HOSTING

NẮM BẮT CƠ HỘI, THÀNH CÔNG DẪN LỐI

Cùng trải nghiệm dịch vụ hosting tốc độ cao được hơn 100,000 khách hàng sử dụng

ĐĂNG KÝ NHẬN TÀI LIỆU THÀNH CÔNG
Cảm ơn bạn đã đăng ký nhận tài liệu mới nhất từ Vietnix!
ĐÓNG

ĐĂNG KÝ DÙNG THỬ HOSTING

7 NGÀY MIỄN PHÍ

ĐĂNG KÝ DÙNG THỬ HOSTING

7 NGÀY MIỄN PHÍ

XÁC NHẬN ĐĂNG KÝ DÙNG THỬ THÀNH CÔNG
Cảm ơn bạn đã đăng ký thông tin thành công. Đội ngũ CSKH sẽ liên hệ trực tiếp để kích hoạt dịch vụ cho bạn nhanh nhất!
ĐÓNG