Trang chủTin tứcHướng dẫn cài đặt SSL Localhost cùng với Nginx
Hướng dẫn cài đặt SSL Localhost cùng với Nginx

Hướng dẫn dễ hiểu về cách cài đặt SSL Localhost với Nginx, bao gồm các bước thiết lập từng bước và vai trò của chứng chỉ SSL trong việc bảo vệ website.

Với sự phát triển của Internet, bảo mật trở thành yếu tố quan trọng không thể bỏ qua khi xây dựng website. Trong đó, chứng chỉ SSL là giải pháp hữu hiệu để tăng cường tính bảo mật cho trang web của bạn, đặc biệt nếu bạn sử dụng Nginx làm web server. Trong bài viết này, chúng ta sẽ cùng tìm hiểu cách cài đặt SSL Localhost trên Nginx một cách dễ dàng và hiệu quả.

cài đặt SSL Localhost cùng với Nginx
cài đặt SSL Localhost cùng với Nginx

1.SSL là gì? Tại sao nó quan trọng?

SSL là viết tắt của "Secure Sockets Layer," là một giao thức bảo mật dùng để bảo vệ thông tin truyền tải giữa máy tính của người dùng và máy chủ web. Nó đã được tiếp tục phát triển và nâng cấp thành TLS (Transport Layer Security).

>>> Xem thêm: Chứng chỉ SSL là gì? Phân loại và lợi ích của SSL với website

Những lợi ích mà SSL mang lại:

  • Bảo mật dữ liệu truyền tải bằng việc mã hóa dữ liệu.
  • Xác thực máy chủ: Người dùng có thể chắc chắn rằng họ kết nối với trang web chính xác và không bị đối mặt với trang web giả mạo.
  • Tăng tin cậy: Trang web sử dụng SSL thường hiển thị biểu tượng khóa và/hoặc "HTTPS" trong thanh địa chỉ trình duyệt, làm tăng tin cậy của người dùng.
  • Điều hướng an toàn: SSL hỗ trợ việc triển khai đường dẫn URL an toàn (HTTPS) tránh việc giả mạo.
  • Tăng thứ hạng tìm kiếm: Các công cụ tìm kiếm như Google ưu tiên trang web có HTTPS trong thứ hạng tìm kiếm của họ.
  • Tuân thủ quy tắc an toàn dữ liệu: Nhiều quy định và quy tắc ngành công nghiệp yêu cầu việc sử dụng SSL để bảo vệ thông tin khách hàng và dữ liệu nhạy cảm.
SSL là viết tắt của "Secure Sockets Layer"
SSL là viết tắt của "Secure Sockets Layer"

2. Mục tiêu của cài đặt SSL localhost

Có 2 cách mà bạn có thể nhận chứng chỉ SSL:

  • Mua từ CA : Các tổ chức cung cấp chứng chỉ SSL nhưng sẽ mất phí.
  • Tự ký chứng chỉ SSL cho máy của mình: sẽ hoàn toàn miễn nhưng các trình duyệt sẽ có cảnh báo không an toàn khi bạn truy cập trang web của mình.

Khi bạn đang muốn phát triển trang web hay làm bất cứ việc gì khác mà cần chứng chỉ SSL nhưng ví tiền của bạn lại hạn hẹp thì SSL Localhost chính là giải pháp thích hợp nhất để các bạn có thể sử dụng SSL mà không mất phí.

Đơn giản hơn Lập trình viên muốn cài đặt / lập trình trước giao thức này để lường trước kết quả. Như mình thì mình bật HTTP/2 lên để test nên chắc chắn phải có SSL cho dù là đang Dev trên localhost.

3. Những yêu cầu cần có của SSL Localhost và SSL do CA cấp

Khi bạn tạo một SSL localhost và một SSL được cấp bởi một tổ chức cấp chứng chỉ (CA), cả hai sẽ sử dụng các file khác nhau.

yêu cầu cần có của SSL Localhost
yêu cầu cần có của SSL Localhost
  • SSL localhost
    • Private Key: Đây là khóa riêng tư được sử dụng để ký và giải mã thông tin. File này thường có định dạng PEM (.pem) hoặc RSA (.key)
    • Certificate Signing Request (CSR): Đối với SSL tự ký, CSR không cần thiết vì bạn tự ký chứng chỉ. Tuy nhiên, một số công cụ có thể yêu cầu CSR trong quá trình tạo khóa.
    • SSL Certificate: Đây là chứng chỉ chứa thông tin xác thực về máy chủ. File này thường có định dạng PEM (.pem) hoặc X.509 (.crt)
  • SSL do CA cấp
    • Private Key: Giống như trong trường hợp SSL tự ký, file khóa riêng tư được sử dụng để ký và giải mã thông tin.
    • Certificate Signing Request (CSR): Trong trường hợp này, bạn sẽ tạo một CSR và gửi nó đến Tổ chức Cấp chứng chỉ (CA) để ký. File CSR có thể có định dạng PEM (.pem).
    • SSL Certificate: File chứng chỉ SSL được cấp bởi CA, thường có định dạng PEM (.pem) hoặc X.509 (.crt).
    • CA Certificate: File chứng chỉ của Tổ chức Cấp chứng chỉ, cần để trình duyệt hoặc ứng dụng tin tưởng chứng chỉ SSL của bạn. File này thường có định dạng PEM (.pem) hoặc X.509 (.crt).

Các phần mềm cần có để tạo SSL Localhost:

  • Linux: CentOS 8 hoặc bất kỳ Linux nào khác
  • Nginx: Dùng để làm Web Server
  • Openssl: Dùng để cấp chứng chỉ cho mình

4. Tạo khóa và chứng chỉ SSL mới

Để có thể cấp chứng chỉ SSL cho chính mình thì điều đầu tiên bạn cần phải là CA và bạn có thể tự làm CA chỉ bằng một vài câu lệnh sử dụng Openssl. Nhưng CA của bạn sẽ không thể như các CA khác vì là do bạn tự phát nên sẽ thiếu tính an toàn và tin tưởng nhưng để sử dụng với Localhost là quá đủ rồi.

Tạo ra private key với 2048 bit.

openssl genrsa -out CA.key 2048

Tạo ra file xác định danh tính của CA từ private key đã tạo ra từ trước.

openssl req -x509 -sha256 -new -nodes -days 3650 -key CA.key -out CA.pem

Ở phần trên là phần ta tạo ra các file để định danh cho CA của chúng ta. Nhưng để trang web có thể sử dụng SSL cần phải tạo cho nó 1 cặp private key và public key sử dụng riêng cho trang web và được ký với CA ta vừa tạo ra ở trên.

Tạo ra private key cho trang web.

openssl genrsa -out localhost.key 2048

Tạo ra file chứa yêu cầu ký chứng chỉ từ private key ta vừa tạo. File này dùng để kết hợp với các file khác để có thể ký chứng chỉ cho trang web. File csr này bao gồm cả public key và thời hạn hiệu lực của chứng chỉ.

openssl req -new -key localhost.key -out localhost.csr

Tạo ra 1 file chứa thông tin mở rộng của chứng chỉ. Để khi ký chứng chỉ phải tuân theo điều kiện trong file.

vi localhost.ext

Thêm vào nội dung sau:

authorityKeyIdentifier = keyid,issuerbasicConstraints = CA:FALSEkeyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEnciphermentsubjectAltName = @alt_names[alt_names]DNS.1 = thanhquang.comIP.1 = 192.168.10.21
  • authorityKeyIdentifier = keyid,issuer: Xác định cách xác định phần issuer (tổ chức chứng nhận) và keyid (định danh của khóa) trong chứng chỉ.
  • basicConstraints = CA:FALSE: không được sử dụng chứng chỉ này để ký chứng chỉ khác.
  • keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment : chỉ định cách khóa riêng sẽ được sử dụng trong quá trình giao tiếp an toàn, chẳng hạn như ký số, không chối bỏ, mã hóa khóa, và mã hóa dữ liệu.
  • subjectAltName = @alt_names: Cho phép đặt các tên miền hoặc địa chỉ IP thay thế khác nhau để chứng chỉ có thể được sử dụng cho nhiều tên miền hoặc địa chỉ IP.
  • DNS.1 = thanhquang.com : tên miền được cấp chứng chỉ.
  • IP.1 = 192.168.10.21: xác định địa chỉ IP thay thế cho tên miền.

Dùng chứng chỉ CA ký cho chứng chỉ của trang web ta đã tạo và tạo ra file chứa chứng chỉ đã ký.

openssl x509 -req -in localhost.csr -CA CA.pem -CAkey CA.key -CAcreateserial -days 365 -sha256 -extfile localhost.ext -out localhost.crt

5. Cài đặt SSL trên Web Server (Nginx)

Tạo ra thư mục lưu trữ các chứng chỉ để nginx sử dụng.

mkdir /etc/nginx/ssl-certificatemv localhost.crt localhost.key /etc/nginx/ssl-certificate

Tạo ra file chứa cấu hình Virtual host.

vi /etc/nginx/conf.d/thanhquang.com.conf

Thêm vào nội dung sau:

server {listen 80;server_name thanhquang.com;return 301 https://$host$request_uri;}server {  listen 443 ssl;  server_name thanhquang.com;  ssl_certificate     /etc/nginx/ssl-certificate/localhost.crt;  ssl_certificate_key /etc/nginx/ssl-certificate/localhost.key;  location / {    root /usr/share/nginx/thanhquang.com;    index index.html index.htm;  }}
  • Mỗi khi có request đến port 80 thì sẽ có mã http là 301 và được chuyển đến https
  • chỉ ra thêm ssl_certificate chứa đường dẫn của chứng chỉ đã ký
  • chỉ ra thêm ssl_certificate_key chứa đường dẫn private key của trang web

Tiến hành tạo thư mục chứa nội dung trang web.

mkdir /usr/share/nginx/thanhquang.comvi /usr/share/nginx/thanhquang.com/index.html

Thêm vào nội dung sau:

<DOCTYPE html><html>  <head>    <title>www.thanhquang.com</title>  </head>  <body>    <h1>Success: Truy cap thanh cong thanhquang.com tren Centos 7 </h1>
    <h1>Success: Day la bai Lab ve Load Balancing do SunCloud huong dan </h1>    <h1>Success: Bai Lab nay con ket hop them ca Reverse Proxy nen kha dai va day du</h1>    <h1>Success: Toi mong bai viet nay se giup ich cho ban</h1>    <h1>Success: Xin cam on </h1>  </body></html>

Tiến hành chỉnh sửa lại quyền cho thư mục.

chmod -R 755 /usr/share/nginx/chown -R nginx:nginx /usr/share/nginx/

tiến hành reload lại nginx.

nginx -s reload

chỉnh sửa lại file host trong windows để trình duyệt trong máy chúng ta có thể hiểu được tên miền.

Cài đặt SSL trên Web Server
Cài đặt SSL trên Web Server

6. Kiểm Tra

Vào trang web và tiến hành kiểm tra thử bằng cách gõ tên miền của chúng ta.
Vào trang web và tiến hành kiểm tra thử bằng cách gõ tên miền của chúng ta.

Tuy đã có chứng chỉ ssl và lên được https nhưng trình duyệt vẫn cho rằng không bảo mật vì đây là chứng chỉ tự cấp.

Để cho trình duyệt có thể tin tưởng thì ta sẽ add file CA.pem vào chrome và bật tính năng tin tưởng chứng chỉ client lên.

bật tính năng tin tưởng chứng chỉ client
1. bật tính năng tin tưởng chứng chỉ client
bật tính năng tin tưởng chứng chỉ client 2
2. bật tính năng tin tưởng chứng chỉ client
bật tính năng tin tưởng chứng chỉ client 3
3. bật tính năng tin tưởng chứng chỉ client
bật tính năng tin tưởng chứng chỉ client 4
4. bật tính năng tin tưởng chứng chỉ client

Tiến hành restart lại chrome rồi kiểm tra lại.

chrome://restart
Kết quả sau kiểm tra
kiểm tra lại kết quả

7. Một vài lưu ý

Khi tạo SSL Localhost thì sẽ có 3 file quan trọng là:

  • localhost.key Chứa private key của Web Server. Nó dùng để giải mã các request của Client.
  • localhost.crt: Đây là file chứa chứng chỉ của Web Server. Trong file này bao gồm cả public key và chứng chỉ CA bao gồm cả thời gian hiệu lực.
  • CA.pem: đây là file chứa thông tin CA của bạn dùng để khai báo với Chrome nhằm mục đích Chrome xác thực CA của bạn và tin tưởng chứng chỉ SSL của bạn đã ký.

8. Kết luận

Đến đây là đã kết thúc bài hướng dẫn thực hiện lấy chứng chỉ SSL Localhost của mình rồi. Việc cài đặt SSL Localhost kết hợp với Nginx mang đến nhiều lợi ích đáng kể cho người dùng. Hơn nữa cài đặt SSL Localhost với Nginx  cũng tương đối đơn giản và dễ dàng thực hiện. Trong quá trình cài đặt của mình nếu gặp khó khăn gì, bạn có thể liên hệ với chúng tôi để được tư vấn, hỗ trợ sớm nhất nhé.

Tác giả:
author avatar
Mình là Huy, hiện mình đang là kỹ sư hệ thống tại SunCloud. Mình có nhiều năm kinh nghiệm, kiến thức chuyên môn về mạng, hệ thống, điện toán mây và an ninh bảo mật. Mình đã triển khai và vận hành rất nhiều dự án thực tế cho doanh nghiệp, cơ quan. Mình đã đạt được một số chứng chỉ quốc tế như CCNP, LPI, VCP, đồng thời mình vẫn đang tiếp tục học tập để trau dồi kiến thức mỗi ngày. Mình rất yêu thích công nghệ, đam mê chia sẻ những kiến thức, thông tin hữu ích cho mọi người.

Tin tức nổi bật