Transport Layer Security (TLS) và Secure Sockets Layer (SSL) đều là các giao thức bảo mật dựa trên internet, được sử dụng để mã hóa dữ liệu truyền qua mạng. Ví dụ, khi khách hàng kết nối đến máy chủ web của bạn để yêu cầu một trang web, bạn nên mã hóa kết nối bằng chứng chỉ TLS/SSL để bảo vệ dữ liệu nhạy cảm như mật khẩu, thông tin thẻ tín dụng, v.v.
Luôn tồn tại các mối đe dọa mạng nghiêm trọng khi bạn trao đổi thông tin mật dưới dạng văn bản thuần giữa khách hàng (ví dụ: trình duyệt web, ứng dụng di động hoặc phần mềm trên máy tính) và một hệ thống máy chủ như Apache. Do đó, bạn cần triển khai một lớp bảo mật giữa các hệ thống của mình – đây chính là vai trò của chứng chỉ SSL/TLS.
Trước khi bắt đầu bảo mật Apache với chứng chỉ SSL self-signed, bạn cần một VPS mạnh mẽ để triển khai website an toàn. Hãy khám phá các gói mua VPS tại DataOnline với hiệu suất cao, băng thông không giới hạn, hỗ trợ 24/7, đảm bảo đáp ứng mọi nhu cầu của bạn!
Để tạo chứng chỉ SSL/TLS, bạn bắt đầu bằng cách tạo một Certificate Signing Request (CSR) trên máy chủ của bạn. Quá trình này sẽ tạo ra một cặp khóa public/private và một subject để xác định tên của trang web của bạn. Sau đó, bạn gửi CSR đến một Certificate Authority (CA) đáng tin cậy để được ký (có thể mất phí).
Trong một số trường hợp, bạn không cần gửi chứng chỉ đến một CA bên thứ ba được tin cậy công khai. Bạn có thể dễ dàng triển khai và tùy chỉnh một chứng chỉ tự ký bằng OpenSSL mà không phải trả phí. Tuy nhiên, chỉ có bạn mới tin cậy chứng chỉ này và bất kỳ ai cố gắng kết nối đến máy chủ web của bạn sẽ nhận được cảnh báo trên trình duyệt. Dù vậy, loại chứng chỉ này rất phù hợp cho các mạng nội bộ và môi trường kiểm thử khi cấu hình ban đầu.
Tiếp theo, DataOnline sẽ hướng dẫn bạn bảo mật máy chủ Apache của mình bằng chứng chỉ tự ký trên máy chủ Ubuntu 20.04.
Yêu cầu tiên quyết
Để hoàn thành hướng dẫn này, hãy đảm bảo bạn có:
- Một máy chủ Ubuntu 20.04.
- Một người dùng có quyền sudo.
- Một máy chủ Apache.
1. Tạo Private Key và tập tin chứng chỉ
Khi bảo mật lưu lượng truy cập web bằng giao thức SSL/TLS, bạn chỉ cần chia sẻ public key với mọi người và giữ private key trên máy chủ của mình. Để tạo ra các khóa này, hãy chạy lệnh openssl sau:
Giải thích các tham số trong lệnh openssl:
- req -x509: Tùy chọn này được sử dụng để tạo chứng chỉ tự ký thay vì tạo CSR.
- -nodes: Chỉ định cho openssl không mã hóa private key bằng passphrase. Điều này giúp Apache có thể đọc tập tin này mà không cần nhập mật khẩu mỗi khi máy chủ khởi động lại.
- -days 365: Số ngày chứng chỉ sẽ có hiệu lực (ví dụ: 365 ngày).
- -newkey rsa:2048: Khai báo kích thước khóa rõ ràng. Mặc dù kích thước tối thiểu có thể là 512 bits, nhưng giá trị 2048 bits cung cấp độ bảo mật cao hơn.
- -keyout filename: Tên tập tin nơi lưu private key mới tạo.
- -out filename: Tên tập tin *.crt để lưu chứng chỉ đã ký.
Khi bạn chạy lệnh openssl trên, hệ thống sẽ yêu cầu bạn nhập các thông tin sau để tạo chứng chỉ. Hãy nhập giá trị phù hợp và nhấn Enter sau mỗi câu trả lời:
- Country Name (2 letter code) [AU]: Nhập mã hai chữ cái của quốc gia (ví dụ: KE, USA).
- State or Province Name (full name) [Some-State]: Nhập tên đầy đủ của bang/tỉnh (ví dụ: CALIFORNIA).
- Locality Name (eg, city) []: Nhập tên thành phố (ví dụ: LOS ANGELES).
- Organization Name (eg, company) [Internet Widgits Pty Ltd]: Nhập tên tổ chức (ví dụ: SAMPLE COMPANY).
- Organizational Unit Name (eg, section) []: Nhập bộ phận của tổ chức (ví dụ: IT).
- Common Name (e.g. server FQDN or YOUR name) []: Nhập tên miền đầy đủ hoặc địa chỉ IP của máy chủ (ví dụ: example.com hoặc 192.0.2.1).
- Email Address []: Nhập địa chỉ email (ví dụ: info@example.com).
Sau khi hoàn thành các bước trên, lệnh openssl sẽ tạo ra private key và tập tin chứng chỉ tại các đường dẫn sau:
- /etc/ssl/private/apache.key
- /etc/ssl/certs/apache.crt
Bạn đã tạo thành công các tập tin cần thiết cho chứng chỉ SSL/TLS. Bước tiếp theo là cấu hình các cài đặt SSL/TLS trong tập tin virtual host của Apache.
2. Kích hoạt SSL trên tập tin Virtual Host
Apache duy trì một tập tin virtual host mặc định để xử lý lưu lượng SSL tại thư mục /etc/apache2/sites-available có tên default-ssl.conf. Để máy chủ web có thể mã hóa dữ liệu bằng chứng chỉ của bạn, bạn cần thay đổi một số cấu hình trong tập tin này.
Sử dụng trình soạn thảo nano để mở tập tin /etc/apache2/sites-available/default-ssl.conf
:
Trong tập tin này, tìm dòng chứa:
và bên dưới dòng đó, thêm chỉ thị ServerName theo sau là tên miền của bạn hoặc địa chỉ IP công cộng của máy chủ. Ví dụ:
Tiếp theo, trong cùng tập tin, tìm phần cấu hình SSL sau:
Thay đổi thành đường dẫn đầy đủ đến chứng chỉ của bạn và private key:
Lưu và đóng tập tin sau khi chỉnh sửa xong. Sau đó, kích hoạt module SSL của Apache bằng lệnh:
Tiếp theo, kích hoạt site virtual host default-ssl.conf bằng lệnh:
Máy chủ Apache của bạn giờ đã sẵn sàng để phục vụ nội dung được mã hóa. Tuy nhiên, trước khi kiểm tra các cài đặt mới, bạn cần cấu hình firewall để cho phép kết nối an toàn qua cổng 443.
3. Mở cổng SSL trên Firewall
Trong Apache, bạn cần cho phép lưu lượng truy cập an toàn thông qua cổng 443 thay vì cổng mặc định 80 (nơi dữ liệu được truyền dưới dạng văn bản thuần). Bạn có thể mở cổng HTTPS bằng công cụ ufw. Đầu tiên, kích hoạt firewall bằng lệnh:
Tiếp theo, cho phép Apache lắng nghe trên cả cổng 80 và 443 bằng lệnh:
Output:
Để tránh bị khóa khỏi máy chủ, cho phép kết nối SSH qua cổng OpenSSH:
Output:
Hãy đảm bảo mở các cổng khác nếu ứng dụng của bạn yêu cầu. Sau đó, kiểm tra trạng thái firewall bằng lệnh:
Bạn sẽ nhận được kết quả tương tự như sau:
Firewall của bạn đã được cấu hình để cho phép lưu lượng truy cập được mã hóa đến máy chủ web. Bước tiếp theo là kiểm tra trang web bảo mật của bạn.
4. Kiểm tra cấu hình mới
Truy cập URL dưới đây trên trình duyệt và thay thế 192.0.2.1 bằng địa chỉ IP công cộng hoặc tên miền chính xác của bạn. Đảm bảo sử dụng giao thức https://:
Máy chủ Apache của bạn bây giờ sẽ mã hóa bất kỳ dữ liệu nào được trao đổi qua chứng chỉ SSL/TLS. Lưu ý rằng trình duyệt có thể hiển thị cảnh báo (Your connection is not private) vì chứng chỉ này không được ký bởi một CA đáng tin cậy. Tuy nhiên, bạn chỉ cần bỏ qua cảnh báo vì mục đích của bạn chỉ là kiểm tra việc mã hóa. Ở bước tiếp theo, bạn sẽ chuyển hướng tất cả các kết nối qua cổng 80 (không bảo mật) sang cổng 443 (bảo mật).
5. Chuyển hướng lưu lượng HTTP sang HTTPS (Tùy chọn)
Sau khi tạo, cấu hình và kiểm tra chứng chỉ SSL/TLS, bạn có thể tùy chọn chuyển hướng tất cả lưu lượng HTTP sang HTTPS bằng cách chỉnh sửa tập tin /etc/apache2/sites-available/000-default.conf
. Mở tập tin bằng nano:
Thêm dòng sau ngay dưới thẻ mở <VirtualHost *:80>
:
(Thay 192.0.2.1 bằng tên miền hoặc địa chỉ IP công cộng của bạn)
Ví dụ, tập tin sẽ có dạng:
Lưu và đóng tập tin. Sau đó, khởi động lại Apache để áp dụng cấu hình mới:
Truy cập URL HTTP trên trình duyệt (ví dụ: http://192.0.2.1) và bạn sẽ được chuyển hướng sang phiên bản HTTPS của trang web.
Các cài đặt chứng chỉ SSL/TLS và chuyển hướng của bạn đã hoạt động đúng. Mọi giao tiếp giữa máy chủ web và khách hàng bây giờ sẽ được trao đổi qua kênh bảo mật.
Kết luận
Trong hướng dẫn này, bạn đã học cách bảo mật lưu lượng truy cập trên máy chủ Apache của mình bằng cách cài đặt chứng chỉ SSL/TLS tự ký. Với chứng chỉ này, bạn có thể bảo vệ dữ liệu nhạy cảm khi truyền qua mạng, đồng thời đảm bảo rằng các kết nối từ API, ứng dụng di động và ứng dụng desktop của bạn đến cổng bảo mật sẽ được mã hóa. Điều này không chỉ giúp cải thiện bảo mật mà còn nâng cao độ tin cậy của hệ thống khi giao tiếp qua mạng.
Dù chứng chỉ tự ký là một giải pháp tạm thời, nhưng nó giúp bạn khởi đầu với môi trường bảo mật. Nếu cần, bạn có thể thay thế nó bằng chứng chỉ SSL/TLS chính thức từ các tổ chức chứng nhận uy tín như Let’s Encrypt khi triển khai vào sản phẩm thực tế.
Sau khi cấu hình SSL self-signed, bạn có thể tối ưu hóa Apache trên một VPS đáng tin cậy. DataOnline cung cấp dịch vụ thuê VPS giá rẻ, với ổ cứng NVMe tốc độ cao và chi phí hợp lý, giúp website của bạn vận hành mượt mà, an toàn mà không lo tốn kém!