Reading Time: 10 minutes

Bài hướng dẫn này trình bày cách nhận và cài đặt chứng chỉ SSL từ một nhà cung cấp chứng thực (Certificate Authority – CA) thương mại đáng tin cậy. Chứng chỉ SSL cho phép web server mã hóa truy cập, đồng thời cung cấp cơ chế định danh của server cho người truy cập. Các website sử dụng SSL được truy cập qua giao thức HTTPS

Trước giữa những năm 2010, ít trang web nhỏ sử dụng SSL hoặc HTTPS. Nhưng từ đó trở đi, các tiêu chuẩn về bảo mật đã nâng lên. Dự án Let’s Encrypt cũng xuất hiện để cung cấp chứng chỉ SSL đáng tin cậy miễn phí ở quy mô lớn, cho phép bất cứ ai đều được sử dụng HTTPS khi họ cần.

Tuy nhiên, chứng chỉ của Let’s Encrypt có một số hạn chế. Chúng hết hạn sau mỗi 3 tháng, và chủ web phải có sẵn một script tự động gia hạn. Điều này có thể khó khả thi trong nhiều trường hợp.

Let’s Encrypt cũng không cung cấp chứng chỉ Extended Validation (Xác thực mở rộng) để xác thực quyền sở hữu pháp lý đối với web của bạn. Bạn cũng không thể có Wildcard Certificates (Chứng chỉ wildcard) để tự động khớp tất cả subdomain (như shop.example.com) mà không cần bạn phải đăng ký từng cái.

Đối với hầu hết người dùng, đó sẽ không phải là những hạn chế đáng kể. Let’s Encrypt là một lựa chọn phổ biến cho nhiều website cá nhân và thương mại. Tuy nhiên, nếu bạn là doanh nghiệp quy mô lớn và đòi hỏi những yêu cầu chuyên biệt, bạn nên cân nhắc mua chứng chỉ từ một CA thương mại.

Bài viết này hướng dẫn cách chọn và triển khai chứng chỉ SSL từ một nhà cung cấp chứng thực đáng tin cậy. Sau khi bạn đã có chứng chỉ SSL, chúng ta sẽ đề cập đến việc cài đặt nó trên các web server Nginx và Apache.

Những điều cần chuẩn bị

Đây là những thứ bạn cần có khi muốn nhận chứng chỉ SSL từ một CA thương mại:

  • Một tên miền đã đăng ký. Xuyên suốt bài này chúng ta sẽ dùng tên miền ví dụ example.com. Bạn có thể mua tên miền từ Namecheap, đăng kí miễn phí với Freenom, hoặc sử dụng bất kì nhà đăng ký tên miền nào.
  • Quyền truy cập vào một trong các địa chỉ email trong bản ghi WHOIS của tên miền trên hoặc vào một địa chỉ email dạng admin tại chính tên miền đó. Các bên cung cấp SSL thường sẽ xác thực quyền kiểm soát tên miền bằng cách gửi email xác thực đến một trong các địa chỉ trong bản ghi WHOIS của tên miền, hoặc đến một địa chỉ email quản trị chung tại chính tên miền đó. Để được cấp chứng chỉ Extended Validation, bạn cũng sẽ phải cung cấp giấy tờ cho CA để xác minh danh tính pháp lý của chủ sở hữu website, cùng các yêu cầu khác.
  • Các bản ghi DNS đã được thiết lập cho server của bạn. Bạn có thể xem thêm tài liệu hướng dẫn của bên cung cấp server cho bạn để hiểu cách làm.

Bài hướng dẫn này sẽ cung cấp hướng dẫn cấu hình cho một server Ubuntu 22.04 với một người dùng non-root có quyền sudo và một firewall. Hầu hết các bản phân phối Linux hiện đại sẽ hoạt động tương tự.

Bạn cũng nên cài đặt một web server như Nginx hoặc Apache với một server block (hoặc Apache virtual host) cho tên miền của mình.

Bước 1 – Chọn Nhà cung cấp chứng thực (CA)

Nếu bạn không chắc nên sử dụng CA nào, hãy xem xét những yếu tố sau đây.

Tư cách thành viên Chương trình Chứng chỉ gốc (Root Certificate Program)

Điểm quan trọng nhất là CA phải là thành viên của Root Certificate Program của các hệ điều hành và trình duyệt web phổ biến. Điều này có nghĩa CA đó được tin cậy (trusted) bởi những bên đó. Nếu chứng chỉ SSL của website bạn được ký bởi một “trusted” CA, danh tính của trang được đánh giá là hợp lệ bởi bên tin cậy CA đó.

Hầu hết các CA thương mại mà bạn sẽ gặp đều là thành viên của các Root Certificate Program. Tuy nhiên việc kiểm tra trước khi mua chứng chỉ cũng không thừa. Ví dụ, Apple có công bố danh sách các chứng chỉ gốc SSL đáng tin cậy của họ.

Loại chứng chỉ

Hãy đảm bảo rằng bạn chọn một CA cung cấp loại chứng chỉ mà bạn cần. Nhiều CA cung cấp các biến thể của các loại chứng chỉ này dưới nhiều tên gọi và giá khác nhau.

Dưới đây là mô tả ngắn gọn về từng loại:

  • Single Domain: Sử dụng cho một tên miền duy nhất, ví dụ: example.com. Lưu ý rằng các subdomain như www.example.com, không bao gồm trong đó.
  • Wildcard: Sử dụng cho một tên miền và bất kỳ subdomain nào của nó. Ví dụ, một chứng chỉ wildcard cho *.example.com cũng có thể được sử dụng cho www.example.comstore.example.com.
  • Multiple Domain: Còn có tên là chứng chỉ SAN hoặc UC, chúng có thể được sử dụng với nhiều tên miền và subdomain khi chúng được thêm vào trường Subject Alternative Name. Ví dụ, một chứng chỉ multi-domain duy nhất có thể được sử dụng với cả example.com, www.example.com, và example.net.

Ngoài các loại chứng chỉ đã nêu, có các cấp độ xác thực khác nhau mà các CA cung cấp:

  • Domain Validation (DV): Được cấp sau khi CA xác thực rằng người gửi yêu cầu đúng là bên sở hữu hoặc kiểm soát tên miền được đề cập.
  • Organization Validation (OV): Chỉ có thể được cấp sau khi CA xác thực danh tính pháp lý của người yêu cầu.
  • Extended Validation (EV): Chứng chỉ EV chỉ có thể được cấp sau khi CA cấp phát xác thực danh tính pháp lý, cùng những yếu tố khác, của người yêu cầu, theo một bộ hướng dẫn nghiêm ngặt. Mục đích của loại chứng chỉ này là cung cấp cho người truy cập mức đảm bảo cao hơn về tính hợp pháp của tổ chức của bạn. Chứng chỉ EV có thể là single hoặc multiple domain, nhưng không phải wildcard.

Các tính năng bổ sung

Nhiều CA cung cấp một loạt các tính năng phụ để tạo sự khác biệt so với các nhà cung cấp chứng chỉ SSL khác. Một số tính năng này có thể giúp bạn tiết kiệm chi phí, vì vậy hãy cân nhắc nhu cầu của mình so với các ưu đãi trước khi đặt mua.

Bạn có thể lưu ý các tính năng như việc miễn phí cấp lại chứng chỉ hoặc giảm giá khi mua chứng chỉ cho cả www. và tên miền gốc (ví dụ www.example.com với SAN là example.com).

Bước 2 – Tạo CSR và Khóa riêng (Private Key)

Sau khi đã chuẩn bị hết và biết loại chứng chỉ mình cần, đã đến lúc tạo một yêu cầu ký chứng chỉ (CSR) và khóa private.

Nếu bạn dự định sử dụng Apache HTTP hoặc Nginx làm web server, bạn có thể sử dụng lệnh openssl để tạo khóa private và CSR trên web server của mình. Trong hướng dẫn này, bạn có thể giữ tất cả các file liên quan trong thư mục home, nhưng bạn có thể tự do lưu trữ chúng ở bất kỳ vị trí an toàn nào trên server.

Để tạo một khóa private tên là example.com.key và một CSR tên là example.com.csr, hãy chạy lệnh này (thay thế example.com bằng tên miền của bạn):

openssl req -newkey rsa:2048 -nodes -keyout example.com.key -out example.com.csr

Sau đó nhập một số dòng thông tin sẽ được dùng trong yêu cầu chứng chỉ của bạn. Phần quan trọng nhất là trường Common Name; Nó phải khớp với tên miền bạn muốn sử dụng chứng chỉ, ví dụ: example.com, www.example.com, hoặc (cho yêu cầu chứng chỉ wildcard) *.example.com.

Nếu bạn dự định lấy chứng chỉ OV hoặc EV, đảm bảo rằng tất cả các trường khác phản ánh chính xác thông tin chi tiết về tổ chức hoặc doanh nghiệp của bạn. Không cần thiết phải cung cấp challenge password.

Ví dụ:

Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New York
Locality Name (eg, city) []:New York
Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:example.com
Email Address []:sammy@example.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Lệnh này sẽ tạo ra một file .key và một file .csr. File .key là khóa private của bạn và nên được giữ an toàn. File .csr là nội dung bạn sẽ gửi cho CA để yêu cầu chứng chỉ SSL của mình.

ls example.com*
example.com.csr  example.com.key

Sao chép và dán CSR của mình khi gửi yêu cầu chứng chỉ đến CA. Để in nội dung CSR, sử dụng lệnh cat:

cat example.com.csr

Bây giờ bạn đã sẵn sàng để mua chứng chỉ từ một CA.

Bước 3 – Mua và Nhận Chứng chỉ

Có nhiều nhà cung cấp CA thương mại để bạn có thể so sánh và có lựa chọn phù hợp nhất cho riêng mình. Ví dụ, Namecheap là một nhà bán lẻ chứng chỉ SSL đã từng thay đổi nhà cung cấp CA gốc để mang lại chi phí tốt nhất. Hiện tại, họ cung cấp chứng chỉ từ Comodo CA.

Dưới đây là một mẫu các sản phẩm của họ tính đến tháng 12 năm 2022:

Bảng giá của các chứng chỉ SSL thương mại

Sau khi lựa chọn gói cần mua, hãy tải lên CSR mà bạn đã tạo ở bước trước. Nhà cung cấp CA của bạn cũng có thể sẽ có một bước phê duyệt. Họ sẽ gửi một email xác thực đến một địa chỉ trong bản ghi WHOIS của tên miền của bạn hoặc đến một địa chỉ dạng administrator của tên miền mà bạn đang lấy chứng chỉ.

Sau khi chứng chỉ dược phê duyệt, nó sẽ được gửi đến email quản trị được chỉ định. Sao chép và lưu chúng vào server của bạn tại cùng vị trí bạn đã tạo khóa private và CSR. Đặt tên chứng chỉ theo tên miền và có phần mở rộng .crt (ví dụ: example.com.crt) và đặt tên chứng chỉ trung gian là intermediate.crt.

Đến bước này bạn đã có thể cài đặt chứng chỉ đó trên web server của bạn, nhưng trước tiên, bạn cần thực hiện một số thay đổi đối với firewall của mình.

Bước 4 – Cập nhật Firewall để Cho phép HTTPS

Nếu bạn đã bật firewall ufw, hãy điều chỉnh một số cài đặt để cho phép lưu lượng HTTPS đi tới. Cả Nginx và Apache đều đăng ký một vài profile với ufw khi cài đặt.

Bạn có thể xem cài đặt hiện tại với lệnh sau:

sudo ufw status

Nếu bạn nhận được output chỉ chứa Nginx HTTP hoặc Apache, chỉ có lưu lượng HTTP được phép đến server:

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Nginx HTTP                 ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

Để cho phép thêm lưu lượng HTTPS, hãy bật profile Nginx Full hoặc Apache Full và xóa profile HTTP thừa:

sudo ufw allow 'Nginx Full' sudo ufw delete allow 'Nginx HTTP'

Lệnh đó sẽ tạo ra kết quả như thế này:

sudo ufw status Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx Full                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx Full (v6)            ALLOW       Anywhere (v6)

Bước 5 – Cài đặt Chứng chỉ trên Server của bạn

Sau khi nhận được chứng chỉ từ CA, cài đặt nó trên web server của bạn bằng cách thay thêm một vài dòng liên quan đến SSL vào cấu hình phần mềm web server.

Bài này sẽ đề cập đến việc cấu hình Nginx và Apache trên Ubuntu 22.04, nhưng hầu hết các distro Linux mới cũng hoạt động tương tự. Chúng ta sẽ giả định những điều kiện sau:

  • Khóa private, chứng chỉ SSL, và, các chứng chỉ trung gian của CA (nếu có) được đặt trong thư mục home (ví dụ tại /home/sammy).
  • Khóa private được gọi là example.com.key
  • Chứng chỉ SSL được gọi là example.com.crt
  • Chứng chỉ trung gian của CA được nhà cung cấp trả về nằm trong một file gọi là intermediate.crt

Lưu ý: Trong môi trường production, các file này nên được lưu trữ ở nơi mà chỉ process của web server (thường là root) có thể truy cập, còn khóa private phải được giữ an toàn. Ví dụ, Let’s Encrypt lưu trữ các chứng chỉ mà nó tạo ra trong /etc/letsencrypt. Các ví dụ production sẽ có nhiều thay đổi khác nhau do sự phức tạp của các cấu hình multi-server.

Nginx

Đây là các bước để triển khai thủ công một chứng chỉ SSL trên Nginx.

Nếu CA của bạn chỉ trả về một chứng chỉ trung gian, bạn phải tạo một file chứng chỉ chuỗi duy nhất chứa cả chứng chỉ của bạn và các chứng chỉ trung gian của CA.

Giả sử file chứng chỉ của bạn là example.com.crt, bạn có thể sử dụng lệnh cat để nối các file lại với nhau tạo thành một file kết hợp gọi là example.com.chained.crt:

cat example.com.crt intermediate.crt > example.com.chained.crt

Sử dụng nano hoặc editor bạn muốn để sửa file server block mặc định của Nginx:

sudo nano /etc/nginx/sites-enabled/default

Tìm dòng listen, và sửa nó thành listen 443 ssl:

…
server {
    listen 443 ssl;
…

Tiếp theo, tìm dòng server_name trong cùng server block đó, và đảm bảo rằng giá trị của nó khớp với common name trong chứng chỉ của bạn. Đồng thời, thêm các dòng ssl_certificate và ssl_certificate_key để chỉ định đường dẫn đến file chứng chỉ và khóa private của bạn:

…
    server_name example.com;
    ssl_certificate /home/sammy/example.com.chained.crt;
    ssl_certificate_key /home/sammy/example.com.key;
…

Để chỉ cho phép các giao thức và bộ mã hóa SSL an toàn nhất, thêm các dòng sau vào file:

…
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
…

Cuối cùng, để mặc định chuyển hướng các HTTP request sang HTTPS, thêm một server block bổ sung ở đầu file:

server {
    listen 80;
    server_name example.com;
    rewrite ^/(.*) https://example.com/$1 permanent;
}
…

Lưu và đóng file. Nếu sử dụng nano, nhấn Ctrl+X, sau đó khi được nhắc, nhấn Y rồi Enter.

Trước khi khởi động lại Nginx, bạn có thể kiểm tra cấu hình của mình bằng cách sử dụng nginx -t:

sudo nginx -t

Nếu không có vấn đề gì, khởi động lại Nginx để bật SSL qua HTTPS:

sudo systemctl restart nginx

Kiểm tra bằng cách truy cập trang web của bạn qua HTTPS, ví dụ: https://example.com. Bạn cũng nên thử kết nối qua HTTP, ví dụ: http://example.com để đảm bảo rằng nó sẽ tự chuyển hướng đang HTTPS.

Apache

Đây là các bước để triển khai thủ công một chứng chỉ SSL trên Apache.

Sử dụng nano hoặc editor bạn muốn để sửa file virtual host mặc định của Apache:

sudo nano /etc/apache2/sites-available/000-default.conf

Tìm mục nhập <VirtualHost *:80> và sửa nó để web server của bạn sẽ listen cổng 443:

…
<VirtualHost *:443>
…

Tiếp theo, thêm dòng ServerName nếu chưa có:

…
ServerName example.com

Sau đó thêm các dòng sau để chỉ định đường dẫn chứng chỉ và khóa của bạn:

…
SSLEngine on
SSLCertificateFile /home/sammy/example.com.crt
SSLCertificateKeyFile /home/sammy/example.com.key
SSLCACertificateFile /home/sammy/intermediate.crt

Lúc này, server của bạn đã được cấu hình để listen HTTPS (cổng 443), vì vậy các request đến HTTP (cổng 80) sẽ không được trả lời. Để chuyển hướng các yêu cầu HTTP sang HTTPS, thêm đoạn sau vào đầu file (thay tên miền ở cả hai dòng):

<VirtualHost *:80>
   ServerName example.com
   Redirect permanent / https://example.com/
</VirtualHost>
…

Lưu và đóng file. Nếu bạn đang sử dụng nano, nhấn Ctrl+X, sau đó khi được nhắc, nhấn Y rồi Enter.

Kích hoạt module SSL của Apache bằng cách chạy lệnh này:

sudo a2enmod ssl

Bây giờ, khởi động lại Apache để tải cấu hình mới và kích hoạt TLS/SSL qua HTTPS.

sudo systemctl restart apache2

Kiểm tra bằng cách truy cập trang web của bạn qua HTTPS, ví dụ: https://example.com. Bạn cũng nên thử kết nối qua HTTP, ví dụ: http://example.com để đảm bảo rằng nó được tự chuyển qua HTTPS.

Kết luận

Trong bài hướng dẫn này, bạn đã học cách xác định khi nào cần mua chứng chỉ SSL từ một CA thương mại, cũng như cách so sánh và đối chiếu các lựa chọn có sẵn. Bạn cũng biết cách cấu hình Nginx hoặc Apache để hỗ trợ HTTPS, và cách điều chỉnh cấu hình của chúng cho môi trường production.

0 Bình luận

Đăng nhập để thảo luận

Chuyên mục Hướng dẫn

Tổng hợp các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.

Đăng ký nhận bản tin của chúng tôi

Hãy trở thành người nhận được các nội dung hữu ích của CyStack sớm nhất

Xem chính sách của chúng tôi Chính sách bảo mật.