Ngày đăng: 27 tháng 6 năm 2023
Hướng dẫn này sẽ chỉ cho bạn cách lấy và cài đặt chứng chỉ SSL từ Tổ chức phát hành chứng chỉ thương mại đáng tin cậy (Certificate Authority - CA). Chứng chỉ SSL cho phép máy chủ web mã hóa lưu lượng truy cập của họ và cũng cung cấp cơ chế xác thực danh tính máy chủ cho khách truy cập của họ. Các trang web sử dụng SSL được truy cập thông qua giao thức https://
.
Trước giữa những năm 2010, nhiều trang web nhỏ hơn không phải lúc nào cũng sử dụng SSL hoặc HTTPS. Kể từ đó, kỳ vọng về bảo mật đã tăng lên và dự án Let's Encrypt được tạo ra để cung cấp chứng chỉ SSL miễn phí, đáng tin cậy trên quy mô lớn, cho phép hầu hết mọi người sử dụng HTTPS khi cần.
Tuy nhiên, có một số hạn chế đối với chứng chỉ của Let's Encrypt. Chúng hết hạn 3 tháng một lần, thường yêu cầu bạn phải có tập lệnh tự động gia hạn đang hoạt động và có thể khó sử dụng trong những môi trường không thể thực hiện được điều này. 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 hợp pháp đối với sự hiện diện trên web của bạn hoặc Wildcard Certificates (Chứng chỉ ký tự đại diện) sẽ tự động khớp với mọi miền phụ có thể có của trang web của bạn (chẳng hạn như shop.example.com) mà không cần bạn phải đăng ký từng miền theo cách thủ công .
Đối với hầu hết người dùng, đây sẽ không phải là những hạn chế đáng kể. Let's Encrypt là một tùy chọn phổ biến cho nhiều trang web cá nhân và thương mại. Tuy nhiên, nếu bạn có các yêu cầu phần mềm doanh nghiệp cụ thể hoặc hoạt động thương mại rất lớn, bạn nên xem xét việc mua chứng chỉ từ một CA thương mại.
Hướng dẫn này bao gồm cách chọn và triển khai chứng chỉ SSL từ cơ quan cấp chứng chỉ đáng tin cậy. Sau khi bạn đã có được chứng chỉ SSL, hướng dẫn này sẽ bao gồm việc cài đặt nó trên các máy chủ web Nginx và Apache.
Có một số điều kiện tiên quyết để cố gắng lấy chứng chỉ SSL từ CA thương mại:
Hướng dẫn này sẽ cung cấp hướng dẫn cấu hình cho máy chủ Ubuntu 22.04 được thiết lập bằng cách làm theo hướng dẫn cài đặt máy chủ ban đầu cho Ubuntu 22.04 này, bao gồm non-root user đã bật sudo và tường lửa. 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 máy chủ web như Nginx hoặc Apache, làm theo Cách cài đặt Nginx trên Ubuntu 22.04 hoặc Cách cài đặt máy chủ web Apache trên Ubuntu 22.04. Đảm bảo rằng bạn có khối máy chủ (hoặc máy chủ ảo Apache) cho miền của mình.
Nếu bạn không chắc chắn nên sử dụng Tổ chức phát hành chứng chỉ nào, có một số yếu tố cần xem xét.
Điểm quan trọng nhất là CA mà bạn chọn là thành viên của chương trình chứng chỉ gốc của các hệ điều hành và trình duyệt web được sử dụng phổ biến nhất, tức là đó là một CA “đáng tin cậy” và chứng chỉ gốc của nó được các trình duyệt thông thường và các phần mềm khác tin cậy. Nếu chứng chỉ SSL của trang web của bạn được ký bởi một CA đáng tin cậy, thì danh tính của nó được phần mềm tin cậy CA đó coi là hợp lệ.
Hầu hết các CA thương mại mà bạn sẽ gặp sẽ là thành viên của các chương trình CA gốc phổ biến, nhưng bạn không cần phải kiểm tra trước khi mua chứng chỉ của mình. Ví dụ: Apple xuất bản danh sách chứng chỉ gốc SSL đáng tin cậy.
Đảm bảo rằng bạn chọn một CA cung cấp loại chứng chỉ mà bạn yêu cầu. 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 và cấu trúc giá khác nhau. Dưới đây là một mô tả ngắn về từng loại:
example.com
. Lưu ý rằng các tên miền phụ bổ sung, chẳng hạn như www.example.com
, không được bao gồm*.example.com
cũng có thể được sử dụng cho www.example.com
và store.example.com
example.com
, www.example.com
và example.net
Ngoài các loại chứng chỉ đã nói ở trên, còn có các mức xác nhận khác nhau mà CA cung cấp:
Nhiều CA cung cấp nhiều tính năng “bonus” khác nhau để tạo sự khác biệt với phần còn lại của các nhà cung cấp cấp chứng chỉ SSL. Một số tính năng này cuối cùng có thể giúp bạn tiết kiệm tiền, vì vậy, điều quan trọng là bạn phải cân nhắc nhu cầu của mình với các dịch vụ trước khi mua hàng. Ví dụ về các tính năng cần chú ý bao gồm phát hành lại chứng chỉ miễn phí hoặc chứng chỉ theo giá tên miền duy nhất hoạt động cho www.
và tên miền cơ sở, ví dụ: www.example.com
với SAN là example.com
.
Sau khi bạn đã sắp xếp các điều kiện tiên quyết và bạn biết loại chứng chỉ mình cần, đã đến lúc tạo yêu cầu ký chứng chỉ (certificate signing request - CSR) và khóa riêng (private key).
Nếu bạn dự định sử dụng Apache HTTP hoặc Nginx làm máy chủ web của mình, bạn có thể sử dụng lệnh openssl
để tạo khóa riêng và CSR trên máy chủ web của mình. Trong hướng dẫn này, bạn có thể giữ tất cả các tệp có liên quan trong thư mục chính của mình, nhưng vui lòng lưu trữ chúng ở bất kỳ vị trí an toàn nào trên máy chủ của bạn:
Để tạo khóa riêng, được gọi là example.com.key
và CSR, được gọi 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
Tại thời điểm này, bạn sẽ được nhắc nhập một số dòng thông tin sẽ được đưa vào yêu cầu chứng chỉ của bạn. Phần quan trọng nhất là trường Common Name
, phải khớp với tên mà bạn muốn sử dụng chứng chỉ của mình – ví dụ: example.com
, www.example.com
hoặc (đối với yêu cầu chứng chỉ ký tự đại diện) *.example.com
. Nếu bạn dự định lấy chứng chỉ OV hoặc EV, hãy đả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. Việc cung cấp “challenge password” là không cần thiết.
Ví dụ:
OutputCountry 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 []:
Thao tác này sẽ tạo tệp .key
và .csr
. Tệp .key
là khóa riêng tư của bạn và phải được giữ an toàn. Tệp .csr
là tệp bạn sẽ gửi tới CA để yêu cầu chứng chỉ SSL của mình.
- ls example.com*
Outputexample.com.csr example.com.key
Bạn sẽ cần sao chép và dán CSR của mình khi gửi yêu cầu chứng chỉ tới CA của bạn. Để in nội dung của CSR của bạn, hãy sử dụng cat
:
cat example.com.csr
Bây giờ bạn đã sẵn sàng để mua chứng chỉ từ CA.
Có nhiều nhà cung cấp CA thương mại và bạn có thể so sánh và đối chiếu các tùy chọn thích hợp nhất cho thiết lập của riêng mình. Ví dụ: Namecheap hoạt động như một đại lý bán lại chứng chỉ SSL và trước đây đã thay đổi các nhà cung cấp CA ngược dòng để mang lại giá trị tốt nhất. Hiện tại, họ cung cấp chứng chỉ từ Comodo CA. Đây là một mẫu các dịch vụ của họ kể từ tháng 12 năm 2022:
Sau khi thực hiện lựa chọn, bạn sẽ cần 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ó bước “Approver”, bước này sẽ gửi email yêu cầu xác thực tới một địa chỉ trong bản ghi WHOIS của miền của bạn hoặc tới một địa chỉ loại administrator của miền mà bạn đang nhận chứng chỉ.
Sau khi phê duyệt chứng chỉ, chứng chỉ sẽ được gửi qua email cho quản trị viên có tên. Sao chép và lưu chúng vào máy chủ của bạn ở cùng vị trí mà bạn đã tạo khóa riêng và CSR. Đặt tên cho chứng chỉ bằng tên miền và phần mở rộng .crt
, ví dụ: example.com.crt
và đặt tên cho chứng chỉ trung gian là intermediate.crt
.
Chứng chỉ hiện đã sẵn sàng để được cài đặt trên máy chủ web của bạn, nhưng trước tiên, bạn có thể phải thực hiện một số thay đổi đối với tường lửa của mình.
Nếu bạn đã bật tường lửa ufw
theo khuyến nghị trong hướng dẫn thiết lập Ubuntu 22.04 của chúng tôi, bạn sẽ cần điều chỉnh cài đặt để cho phép lưu lượng HTTPS. Cả Nginx và Apache đều đăng ký một vài cấu hình với ufw
khi cài đặt.
Bạn có thể xem cài đặt hiện tại bằng cách nhập:
- sudo ufw status
Nếu bạn nhận được đầu ra chỉ chứa Nginx HTTP
hoặc Apache
, thì chỉ lưu lượng HTTP được phép đến máy chủ web:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
Ngoài ra, để cho phép lưu lượng HTTPS, hãy cho phép cấu hình Nginx Full
hoặc Apache Full
và xóa phụ cấp cấu hình HTTP dư thừa:
- sudo ufw allow 'Nginx Full'
- sudo ufw delete allow 'Nginx HTTP'
Điều đó sẽ tạo ra một kết quả như thế này:
- sudo ufw status
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
Trong bước cuối cùng, bạn sẽ cài đặt chứng chỉ.
Sau khi nhận được chứng chỉ từ CA mà bạn chọn, bạn cần cài đặt nó trên máy chủ web của mình. Điều này liên quan đến việc thêm một vài dòng liên quan đến SSL vào cấu hình phần mềm máy chủ web của bạn.
Hướng dẫn này sẽ đề cập đến việc định cấu hình Nginx và Apache trên Ubuntu 22.04, nhưng hầu hết các phiên bản Linux hiện đại sẽ hoạt động tương tự. Hướng dẫn này cũng đưa ra các giả định sau:
/home/sammy
example.com.key
example.com.crt
intermediate.crt
Lưu ý: Trong môi trường sản xuất, các tệp này phải được lưu trữ ở đâu đó mà chỉ quy trình máy chủ web (thường là root
) mới có thể truy cập và khóa riêng 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ụ sản xuất sẽ khác nhau do sự phức tạp của cấu hình nhiều máy chủ..
Đây là các bước để triển khai thủ công chứng chỉ SSL trên Nginx.
Nếu CA của bạn chỉ trả về một chứng chỉ trung gian, thì bạn phải tạo một tệp chứng chỉ “chained” duy nhất chứa chứng chỉ của bạn và các chứng chỉ trung gian của CA.
Giả sử tệp chứng chỉ của bạn có tên là example.com.crt
, bạn có thể sử dụng lệnh cat
để nối các tệp lại với nhau để tạo một tệp kết hợp có tên là example.com.chained.crt
:
- cat example.com.crt intermediate.crt > example.com.chained.crt
Sử dụng nano
hoặc trình soạn thảo văn bản yêu thích của bạn, hãy mở tệp khối máy chủ Nginx mặc định của bạn để chỉnh sửa:
- sudo nano /etc/nginx/sites-enabled/default
Tìm lệnh listen
và sửa đổi nó để listen 443 ssl
:
…
server {
listen 443 ssl;
…
Tiếp theo, tìm chỉ thị server_name
trong cùng khối máy chủ đó và đảm bảo rằng giá trị của nó khớp với tên chung (common name) của chứng chỉ của bạn. Ngoài ra, hãy thêm các chỉ thị ssl_certificate
và ssl_certificate_key
để chỉ định đường dẫn của chứng chỉ và tệp khóa riêng 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à mật mã SSL an toàn nhất, hãy thêm các dòng sau vào tệp:
…
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, để chuyển hướng các yêu cầu HTTP sang HTTPS theo mặc định, bạn có thể thêm một khối máy chủ bổ sung ở đầu tệp:
server {
listen 80;
server_name example.com;
rewrite ^/(.*) https://example.com/$1 permanent;
}
…
Lưu và đóng tập tin. Nếu bạn đang sử dụng nano
, hãy nhấn Ctrl + X
, sau đó khi được nhắc, hãy nhấn Y
rồi Enter.
Trước khi khởi động lại Nginx, bạn có thể xác thực 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ì, hãy khởi động lại Nginx để kích hoạt SSL qua HTTPS:
- sudo systemctl restart nginx
Kiểm tra nó bằng cách truy cập trang web của bạn qua HTTPS, ví dụ: https://example.com
. Bạn cũng sẽ muốn thử kết nối qua HTTP, ví dụ: http://example.com
để đảm bảo rằng chuyển hướng đang hoạt động bình thường.
Đây là các bước để triển khai thủ công chứng chỉ SSL trên Apache.
Sử dụng nano
hoặc trình soạn thảo văn bản yêu thích của bạn, hãy mở tệp máy chủ ảo Apache mặc định của bạn để chỉnh sửa:
- sudo nano /etc/apache2/sites-available/000-default.conf
Tìm mục <VirtualHost *:80>
và sửa đổi nó để máy chủ web của bạn sẽ lắng nghe trên cổng 443
:
…
<VirtualHost *:443>
…
Tiếp theo, thêm chỉ thị ServerName
, nếu nó chưa tồn tại:
…
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
…
Tại thời điểm này, máy chủ của bạn được định cấu hình để chỉ nghe trên HTTPS (cổng 443), do đó, các yêu cầu tới HTTP (cổng 80) sẽ không được phục vụ. Để chuyển hướng các yêu cầu HTTP sang HTTPS, hãy thêm phần sau vào đầu tệp (thay thế tên ở cả hai vị trí):
<VirtualHost *:80>
ServerName example.com
Redirect permanent / https://example.com/
</VirtualHost>
…
Lưu và đóng tập tin. Nếu bạn đang sử dụng nano
, hãy nhấn Ctrl + X
, sau đó khi được nhắc, hãy nhấn Y
rồi Enter.
Kích hoạt mô-đun SSL Apache bằng cách chạy lệnh này:
- sudo a2enmod ssl
Bây giờ, hãy khởi động lại Apache để tải cấu hình mới và bật TLS/SSL qua HTTPS.
- sudo systemctl restart apache2
Kiểm tra nó bằng cách truy cập trang web của bạn qua HTTPS, ví dụ: https://example.com
. Bạn cũng sẽ muốn thử kết nối qua HTTP, ví dụ: http://example.com
để đảm bảo rằng chuyển hướng đang hoạt động bình thường.
Trong hướng dẫn này, bạn đã học cách xác định khi nào bạn có thể 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 tùy chọn có sẵn. Bạn cũng đã học cách định 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 để sản xuất.