Trang chủ / Website / Cách Cài Đặt Chứng Chỉ SSL cho Website trên Nginx

Cách Cài Đặt Chứng Chỉ SSL cho Website trên Nginx

Nếu bạn quan tâm đến bảo mật trang web hay tối ưu hóa công cụ tìm kiếm, giao thức HTTPS sẽ không phải là một thuật ngữ xa lạ.

Nhưng nếu bạn chỉ mới bắt đầu và đang sở hữu một website, bạn cũng nên biết rằng, HTTPS thực sự rất quan trọng đối với trang web của bạn.

Bởi vì:

Trong bài đăng này, tôi sẽ hướng dẫn bạn cách cài đặt chứng chỉ PositiveSSL cho website trên máy chủ Nginx.

Chuẩn bị

Các tài nguyên và công cụ bạn cần chuẩn bị bao gồm:

  1. Máy chủ Ubuntu đã được cài đặt sẵn ngăn xếp LEMP.
  2. Website WordPress đã được cài đặt với LEMP trên Ubuntu.
  3. Phần mềm để điều khiển máy chủ bằng câu lệnh. Trong trường hợp của tôi đó là Terminal trên Macbook (bạn có thể sử dụng Bitvise SSH Client nếu dùng máy tính hệ điều hành Windows).
  4. Phần mềm quản lý tệp (tải lên, tải xuống) giữa máy chủ web và máy tính của bạn. Bạn có thể tải xuống FileZilla để sử dụng (tương thích cho cả Macbook và máy tính hệ điều hành Windows).
Lưu ý

Trước khi thực hiện các bước trong hướng dẫn này, bạn cần có một chứng chỉ PositiveSSL. Nếu bạn chưa có, bạn có thể mua nó trên Namecheap.

Khi bạn đã sẵn sàng cho việc cài đặt, hãy đăng nhập vào máy chủ của bạn trên Terminal và thực hiện các bước dưới đây.

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

Bạn có thể bắt đầu bằng cách tạo một thư mục được sử dụng để chứa tất cả thông tin SSL.

sudo mkdir /etc/ssl

Trong thư mục này, bạn sẽ tạo ra hai thư mục nữa là privatecsr bằng cách chạy các lệnh sau:

  • /etc/ssl/private: Lưu giữ tệp .key chứa các khóa riêng tư để tạo CSR (Certificate Signing Request).
sudo mkdir -p /etc/ssl/private
  • /etc/ssl/csr: Chứa các tệp .csr để gửi yêu cầu xác nhận chứng thực đến nhà cung cấp SSL.
sudo mkdir -p /etc/ssl/csr

Để kiểm tra xem bạn đã tạo được thư mục ssl hay chưa, bạn gõ lệnh sau vào Terminal và nhấn phím Enter:

ls /etc

Tiếp theo, bạn sẽ tạo hai tệp .key.csr bằng cách chạy lệnh sau:

sudo openssl req -new -newkey rsa:2048 -nodes -keyout /etc/ssl/private/your_domain.key -out /etc/ssl/csr/your_domain.csr

Khi được hỏi một loạt câu hỏi, bạn nhập các thông tin theo hướng dẫn sau:

Lưu ý

Bạn cần gõ không dấu.

  • Country Name: Mã quốc gia. Ví dụ: VN
  • State or Province Name: Tên tỉnh/thành phố. Ví dụ: Hanoi
  • Locality Name: Tên thành phố. Ví dụ: Hanoi
  • Organization Name: Tên tổ chức. Ví dụ: BetterGrowth
  • Organizational Unit Name: Lĩnh vực hoạt động. Ví dụ: Marketing
  • Common Name: Tên miền cần chứng thực, không chứa www. Ví dụ: bettergrowth.org
  • Email Address: Địa chỉ email mà bạn dùng để xác thực đăng ký và nhận các tệp chứng chỉ.
  • A challenge password: Nhấn phím Enter để bỏ qua.
  • An optional company name: Nhấn phím Enter để bỏ qua.

Tiếp theo, bạn đọc tệp .csr để nhận về một chuỗi mã hóa đặc biệt nhằm gửi yêu cầu xác thực chứng chỉ SSL cho tên miền mà bạn cần thiết lập.

Bạn gõ lệnh sau vào Terminal và nhấn phím Enter:

cat /etc/ssl/csr/your_domain.csr

Kết quả sẽ hiển thị một đoạn mã như sau (bạn giữ nguyên giao diện này và chuyển qua bước tiếp):

Mã yêu cầu đăng ký chứng chỉ SSL

Bây giờ, bạn truy cập trang SSL Certificates của Namecheap và nhấp vào nút Activate:

Kích hoạt chứng chỉ SSL trên Namecheap

Bạn sẽ được chuyển đến trang xác thực chứng chỉ SSL.

Tiếp theo, bạn sao chép nội dung chuỗi mã hóa bên giao diện Terminal và dán vào ô Enter CSR.

Sau khi bạn dán vào, Namecheap sẽ tự động nhận tên miền mà bạn vừa thiết lập cho chứng chỉ.

Bạn nhấp vào Next để qua bước tiếp theo:

Nhập CSR được tạo dựa trên thông tin công ty và tên miền bạn sở hữu

Tại đây, bạn sẽ cần xác nhận tên miền này thuộc sở hữu của bạn. Bạn chọn xác thực tên miền bằng cách Add CNAME record: và nhấp vào Next để qua bước tiếp theo:

Xác thực chủ sở hữu tên miền

Bây giờ, bạn sẽ kiểm tra thông tin đăng ký chứng chỉ SSL và nhấp vào nút Submit:

Kiểm tra thông tin đăng ký chứng chỉ SSL

Sau đó, bạn được chuyển đến trang thiết lập chứng chỉ SSL cho tên miền.

Nhấp vào dòng chữ from this page (Edit methods), bạn sẽ được chuyển đến trang thông tin chi tiết.

Trang quan lý chứng chỉ SSL cho tên miền

Tiếp theo, bạn tiến hành nhận bản ghi CNAME bằng cách nhấp vào ô mũi tên trỏ xuống và chọn Get Record:

Nhận bản ghi CNAME

Một cửa sổ bật lên hiện ra:

Nhận bản ghi để xác thực kiểm soát tên miền

Bây giờ, bạn truy cập vào trang web bạn đã mua tên miền và đến phần quản lý DNS. Trong ví dụ này, tôi mua tên miền tại Namecheap.

Bạn thêm một bản ghi CNAME mới:

Thêm bản ghi CNAME

Tiếp theo, bạn sao chép các thông tin tương ứng trong cửa sổ bật lên ở bước trước và dán vào, ví dụ:

  • Host: _82605264CE6B1F5273ACCB7634F88257 (bỏ phần tên miền phía sau).
  • Target: 50CA105C06101F7FE8E12AFD000FEA2C.16C98884C35D676428FA7C3F61B64353.6547d8af7de0e.comodoca.com

Sau đó, bạn nhấp chuột vào dấu tích xanh để lưu lại.

Màn hình của tôi:

Thêm bản ghi CNAME thành công

Bây giờ, bạn đợi tối đa 15 phút, nhà phát hành sẽ gửi chứng chỉ SSL cho bạn thông qua email:

Email cấp chứng chỉ SSL

Tiếp theo, bạn tải xuống tệp đính kèm.

Khi giải nén tệp đính kèm ra, bạn sẽ thấy hai tệp (một tệp đuôi .crt, một tệp đuôi .ca-bundle). Tệp có đuôi .crt chính là chứng chỉ SSL được cấp cho tên miền của bạn.

Các tệp chứng chỉ SSL

Bước 2: Tải chứng chỉ SSL lên máy chủ

Trước tiên, bạn mở phần mềm FileZilla và đăng nhập vào máy chủ web:

Đăng nhập máy chủ từ FileZilla

Bây giờ, bạn sẽ tải hai tệp chứng chỉ lên máy chủ của bạn bằng cách kéo tệp từ trái qua phải trong cửa sổ SFTP:

Lưu ý

Thư mục chứa chứng chỉ SSL trên máy chủ trong cửa sổ SFTP là /etc/ssl. Bạn có thể lưu các tệp chứng chỉ vừa tải xuống từ email ra màn hình máy tính để tiện tìm kiếm và tải chúng lên máy chủ.

Tải chứng chỉ SSL lên máy chủ

Bước 3: Kết hợp các chứng chỉ vào một tệp duy nhất

Sau khi tải tất cả các chứng chỉ lên máy chủ, bạn cần kết hợp chúng vào một tệp .crt duy nhất.

Lưu ý

Khi tạo tệp kết hợp, thông tin của tệp .crt gốc được xếp đầu tiên, sau đó là thông tin được thêm vào từ tệp .ca-bundle.

Chạy lệnh sau trong Terminal để kết hợp các tệp (sử dụng đường dẫn thư mục và tên các tệp chứng chỉ của bạn):

cat /etc/ssl/file_name.crt /etc/ssl/file_name.ca-bundle >> /etc/ssl/file_name.crt

Đôi khi, sau khi kết hợp các tệp chứng chỉ bằng dòng lệnh, lệnh nối có thể làm hỏng mã chứng chỉ. Bạn nên chạy lệnh sau để tìm lỗi cú pháp:

sudo nginx -t

Nếu xảy ra lỗi ghép mã, màn hình sẽ hiển thị lỗi như sau:

nginx: [emerg] cannot load certificate "/etc/ssl/file_name.crt": PEM_read_bio_X509_AUX() failed (SSL: error:04800066:PEM routines::bad end line)
nginx: configuration file /etc/nginx/nginx.conf test failed

Cách khắc phục sự cố khá đơn giản, bạn mở tệp chứng chỉ bằng câu lệnh sau và tạo ngắt dòng giữa hai mã chứng chỉ (đưa vị trí trỏ chuột vào đầu thẻ -----BEGIN CERTIFICATE----- và nhấn phím Enter):

sudo nano /etc/ssl/file_name.crt
Tạo ngắt dòng giữa hai mã trong tệp chứng chỉ SSL

Khi bạn chỉnh sửa xong, bạn có thể lưu và đóng tệp bằng cách gõ tổ hợp phím CTRL+X, sau đó gõ Y và nhấn phím ENTER để xác nhận.

Bước 4: Sửa đổi tệp cấu hình Nginx

Trước khi cấu hình, bạn cần tạo tham số Ephemeral Diffie-Hellman (DHE) mạnh hơn. Tôi không muốn đề cập về góc độ kỹ thuật nhiều vì đó không phải trọng tâm, chúng ta chỉ cần biết rằng điều này là cần thiết:

openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

Bây giờ, bạn cần sửa đổi tệp cấu hình Nginx để bổ sung thêm các cấu hình liên quan đến HTTPS.

Mở tệp cấu hình trong sites-available tại thư mục của Nginx bằng cách chạy lệnh sau trong Terminal:

sudo nano /etc/nginx/sites-available/your_domain

Để cấu hình SSL một cách an toàn và mang lại khả năng bảo mật mạnh mẽ, tôi sử dụng các đề xuất từ ​​Cipherlist cho Nginx. Bạn thêm đoạn mã sau vào vùng chỉnh sửa:

server {
listen *:443 ssl http2;
listen [::]:443 ssl http2;

ssl_certificate /etc/ssl/file_name.crt;
ssl_certificate_key /etc/ssl/private/your_domain.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
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;
ssl_trusted_certificate /etc/ssl/file_name.ca-bundle;
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";

...

}
Lưu ý

Tham khảo toàn bộ cấu hình Nginx trong nội dung bài đăng Cách Cài Đặt WordPress với LEMP trên Ubuntu.

Khi bạn hoàn tất, bạn có thể lưu và đóng tệp bằng cách gõ tổ hợp phím CTRL+X, sau đó gõ Y và nhấn phím ENTER để xác nhận.

Bước 5: Cấu hình chuyển hướng HTTPS

Bây giờ, hãy mở tệp cấu hình WordPress:

sudo nano /var/www/your_domain/wp-config.php

Ngay trước dòng /* That's all, stop editing! Happy blogging. */, bạn thêm đoạn mã sau:

define('WP_HOME','https://your_domain');
define('WP_SITEURL','https://your_domain');

Bây giờ, bạn có thể chạy lệnh sau để tìm lỗi cú pháp:

sudo nginx -t

Nếu không có lỗi nào được cảnh báo, hãy tải lại Nginx bằng cách chạy lệnh:

sudo systemctl reload nginx

Bước 6: Điều chỉnh cài đặt tường lửa

Khi bạn cài đặt LEMP trên Ubuntu và chưa cấu hình SSL, bạn sẽ chỉ cần cho phép lưu lượng truy cập chạy trên cổng 80.

Nhưng bây giờ, bạn đã cấu hình SSL, do đó bạn phải cho phép lưu lượng truy cập chạy trên cổng 443, điều này là bắt buộc.

Kích hoạt tính năng này bằng cách chạy một trong hai lệnh sau:

sudo ufw allow 'Nginx HTTPS'

Hoặc:

sudo ufw allow 'Nginx Full'

Sau đó, bạn cũng có thể xóa cấu hình Nginx HTTP dư thừa:

sudo ufw delete allow 'Nginx HTTP'

Bạn có thể xác nhận bằng cách kiểm tra trạng thái:

sudo ufw status

Kết quả trả về như sau tức là lưu lượng HTTPS hiện được cho phép:

Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere                  
Nginx HTTP                 ALLOW       Anywhere                  
Nginx HTTPS                ALLOW       Anywhere                  
22/tcp (v6)                ALLOW       Anywhere (v6)             
Nginx HTTP (v6)            ALLOW       Anywhere (v6)             
Nginx HTTPS (v6)           ALLOW       Anywhere (v6) 

Bước 7: Kiểm tra chứng chỉ SSL

Bạn truy cập trang web của mình để kiểm tra liệu HTTPS có hoạt động hay không bằng cách gõ https://your_domain vào trình duyệt web.

Tôi cũng khuyên bạn nên sử dụng công cụ SSL Server Test để kiểm tra mức độ hoàn thành cài đặt chứng chỉ SSL của bạn.

Kiểm tra chứng chỉ SSL

Một điểm số A (hoặc A+) cho thấy việc cài đặt chứng chỉ SSL của bạn đáp ứng tiêu chuẩn ngành.

Tạm kết

HTTPS đang trở nên quan trọng hơn bao giờ hết đối với một trang web. Nó giúp tăng bảo mật, cải thiện tốc độ và tối ưu hóa công cụ tìm kiếm.

Với các tính năng và ưu điểm cùng mức giá hợp lý, chứng chỉ PositiveSSL là lựa chọn tôi khuyến nghị bạn nên sử dụng.

Nếu bạn là người mới, tôi hi vọng hướng dẫn cài đặt chứng chỉ SSL trên máy chủ Nginx trong bài đăng sẽ giúp bạn tiết kiệm được một khoảng thời gian đáng kể.

Nếu có bất cứ câu hỏi nào về việc sử dụng giao thức HTTPS và cài đặt chứng chỉ SSL, hãy cho tôi biết bằng cách bình luận xuống phía dưới!

Về tác giả Phạm Đình Quân

Phạm Đình Quân là người sáng lập BetterGrowth, và hiện đang là Head of Digital Execution tại Vingroup. Anh ấy có gần 10 năm kinh nghiệm, từng quản lý đội ngũ marketing hơn 60 nhân sự, yêu thích việc chia sẻ bằng kiến thức và kinh nghiệm dày dặn của mình.
Tìm hiểu thêm

Viết một bình luận