Hướng Dẫn Cấu Hình SSL Self-Signed Cho Apache Server Đơn Giản, An Toàn

Cấu Hình SSL Self-Signed Cho Apache Server

Transport Layer Security (TLS)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:

$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache.key -out /etc/ssl/certs/apache.crt

Giải thích các tham số trong lệnh openssl:

  1. req -x509: Tùy chọn này được sử dụng để tạo chứng chỉ tự ký thay vì tạo CSR.
  2. -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.
  3. -days 365: Số ngày chứng chỉ sẽ có hiệu lực (ví dụ: 365 ngày).
  4. -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.
  5. -keyout filename: Tên tập tin nơi lưu private key mới tạo.
  6. -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:

$ sudo nano /etc/apache2/sites-available/default-ssl.conf

Trong tập tin này, tìm dòng chứa:

...

ServerAdmin sample_email@example.com

DocumentRoot /var/www/html
...

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ụ:

...

ServerAdmin sample_email@example.com
ServerName 192.0.2.1
DocumentRoot /var/www/html
...

Tiếp theo, trong cùng tập tin, tìm phần cấu hình SSL sau:

SSLCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

Thay đổi thành đường dẫn đầy đủ đến chứng chỉ của bạn và private key:

SSLCertificateFile    /etc/ssl/certs/apache.crt
SSLCertificateKeyFile /etc/ssl/private/apache.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:

$ sudo a2enmod ssl

Tiếp theo, kích hoạt site virtual host default-ssl.conf bằng lệnh:

$ sudo a2ensite default-ssl.conf

Cuối cùng, khởi động lại máy chủ Apache để áp dụng các thay đổi:

$ sudo systemctl restart apache2

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:

$ sudo ufw enable

Khi được nhắc, nhấn Y và Enter. Đảm bảo bạn nhận được phản hồi:

Firewall is active and enabled on system startup

Tiếp theo, cho phép Apache lắng nghe trên cả cổng 80 và 443 bằng lệnh:

$ sudo ufw allow 'Apache Full'

Output:

Rule added
Rule added (v6)

Để tránh bị khóa khỏi máy chủ, cho phép kết nối SSH qua cổng OpenSSH:

$ sudo ufw allow 'OpenSSH'

Output:

Rule added
Rule added (v6)

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:

$ sudo ufw status

Bạn sẽ nhận được kết quả tương tự như sau:

To                         Action      From
--                         ------      ----
Apache Full                ALLOW       Anywhere
OpenSSH                    ALLOW       Anywhere
Apache Full (v6)           ALLOW       Anywhere (v6)
OpenSSH (v6)               ALLOW       Anywhere (v6)
...

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://:

https://192.0.2.1

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:

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

Thêm dòng sau ngay dưới thẻ mở <VirtualHost *:80>:

Redirect "/" "https://192.0.2.1/"

(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:

<VirtualHost *:80>
...

Redirect "/" "https://192.0.2.1/"

ServerAdmin webmaster@localhost
DocumentRoot /var/www/html


...
</VirtualHost>

Lưu và đóng tập tin. Sau đó, khởi động lại Apache để áp dụng cấu hình mới:

$ sudo systemctl restart apache2

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!

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *