Tạo Self-Signed SSL cho Apache trên Ubuntu 22.04

by toantv

Trước khi bắt đầu

TLS hay “Transport Layer Security”, và phiên bản trước của nó là SSL, là các giao thức được sử dụng để mã hóa traffic HTTP. Sử dụng công nghệ này, các máy chủ có thể an toàn gửi thông tin cho các máy khách của họ mà không bị lừa và đọc bởi bên thứ ba.

TLS và SSL cung cấp các lớp bảo vệ và mã hóa để đảm bảo tính toàn vẹn, bảo mật và sự riêng tư của dữ liệu trong quá trình truyền. Khi hai bên thiết lập kết nối TLS/SSL, họ thực hiện quá trình giao tiếp an toàn bằng cách sử dụng mã hóa để mã hóa dữ liệu và chứng thực để đảm bảo tính xác thực của các bên tham gia.

Bạn cần có một máy chủ Web, trong hướng dẫn này chúng tôi có một máy chủ Web chạy trên Apache. Bạn có thể thảm khảo cách cài đặt nó tại đây Cài đặt Linux, Apache, MySQL, PHP (LAMP) Stack trên Ubuntu 22.04

Đảm bảo rằng bạn có quyền truy cập sudo vào máy chủ Linux vì các lệnh được sử dụng trong hướng dẫn này yêu cầu đặc quyền root.

Bước 1: Enabling mod_ssl

Trước khi bạn có thể sử dụng bất kỳ chứng chỉ SSL nào, bạn phải kích hoạt mod_ssl, một module của Apache cung cấp hỗ trợ cho việc mã hóa SSL.

Để kích hoạt mod_ssl, sử dụng lệnh a2enmod:

sudo a2enmod ssl

Khởi động lại Apache để kích hoạt module:

sudo systemctl restart apache2

Module mod_ssl đã được kích hoạt và sẵn sàng sử dụng.

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

Bây giờ Apache đã sẵn sàng sử dụng mã hóa, chúng ta có thể tiếp tục tạo chứng chỉ SSL mới. Chứng chỉ này sẽ lưu trữ một số thông tin cơ bản về trang web của bạn và sẽ đi kèm với một tệp khóa cho phép máy chủ xử lý an toàn dữ liệu được mã hóa.

Chúng ta có thể tạo tệp khóa SSL và chứng chỉ bằng lệnh openssl:

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

Sau khi bạn nhập lệnh, bạn sẽ được chuyển đến một cửa sổ nhắc lệnh nơi bạn có thể nhập thông tin về trang web của bạn. Trước khi chúng ta xem xét thông tin đó, hãy xem những gì đang diễn ra trong lệnh mà chúng ta đang sử dụng:

  • openssl: Đây là công cụ dòng lệnh để tạo và quản lý chứng chỉ, khóa và các tệp tin khác của OpenSSL.
  • req -x509: Điều này chỉ định rằng chúng ta muốn sử dụng quản lý yêu cầu chứng chỉ ký (CSR) theo chuẩn X.509. X.509 là một tiêu chuẩn cơ sở hạ tầng khóa công khai mà SSL và TLS tuân theo để quản lý khóa và chứng chỉ.
  • nodes: Điều này cho biết OpenSSL bỏ qua lựa chọn bảo vệ chứng chỉ của chúng ta bằng mật khẩu. Chúng ta cần Apache có thể đọc tệp tin mà không cần sự can thiệp của người dùng khi máy chủ khởi động. Mật khẩu sẽ ngăn điều này xảy ra, vì chúng ta sẽ phải nhập mật khẩu sau mỗi lần khởi động lại.
  • days 365: Tùy chọn này đặt thời gian mà chứng chỉ sẽ được coi là hợp lệ. Chúng ta đặt nó là một năm ở đây. Nhiều trình duyệt hiện đại sẽ từ chối chứng chỉ có hiệu lực lâu hơn một năm.
  • newkey rsa:2048: Điều này chỉ định rằng chúng ta muốn tạo một chứng chỉ và một khóa mới cùng một lúc. Chúng ta chưa tạo khóa được yêu cầu để ký chứng chỉ trong bước trước, vì vậy chúng ta cần tạo nó cùng với chứng chỉ. Phần rsa:2048 cho biết tạo một khóa RSA có độ dài 2048 bit.
  • keyout: Dòng này cho biết OpenSSL nơi để đặt tệp khóa riêng tư được tạo ra.
  • out: Điều này cho biết OpenSSL nơi để đặt chứng chỉ được tạo ra

Nhập vào các thông tin mà hệ thống yêu cầu:

Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:Example
Locality Name (eg, city) [Default City]:Example 
Organization Name (eg, company) [Default Company Ltd]:Example Inc
Organizational Unit Name (eg, section) []:Example Dept
Common Name (eg, your name or your server's hostname) []:your_domain_or_ip
Email Address []:webmaster@example.com

Cả hai tệp bạn đã tạo sẽ được đặt trong thư mục con /etc/ssl. Bạn có thể kiểm tra bằng cách nhập lệnh sau:

ls /etc/ssl/
Output
certs  openssl.cnf  private

Bước 3: Cấu hình Apache sử dụng SSL

Tiếp theo, chúng tôi sẽ cập nhật cấu hình Apache của mình để sử dụng chứng chỉ và khóa mới. Trong hướng dẫn này chúng tôi sẽ chỉnh sửa trong file mặc định của Apache mà ko dùng virtual host.

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

Thêm vào dòng lệnh sau:

<VirtualHost *:443>
   ServerName your_domain_or_ip
   DocumentRoot /var/www/html

   SSLEngine on
   SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
   SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
</VirtualHost>

Bạn cần chuyển hướng lưu lượng http sang https. Bằng cách thêm nội dung sau vào file /etc/apache2/sites-available/000-default.conf

<VirtualHost *:80>
	ServerName your_domain_or_ip
	Redirect / https://your_domain_or_ip/
</VirtualHost>

Kiểm tra lỗi cú pháp và khởi động lại Apache.

sudo apachectl configtest
sudo systemctl reload apache2

Tạo một file html để kiểm tra rằng website của bạn đã có chứng chỉ SSL chưa.

sudo vi /var/www/html/index.html

Thêm vào nội dung sau. Lưu và thoát

<html>
  <head>
    <title>your_domain website</title>
  </head>
  <body>
    <h1>Hello World!</h1>

    <p>This is the landing page of <strong>your_domain</strong>.</p>
  </body>
</html>

Bây giờ hãy truy cập vào trang web của bạn:

http://your_server_ip

Nếu bạn nhìn thấy trang đã chuyển hướng sang https:// . Bạn đã cấu hình thành công SSL cho web của bạn.

Tổng kết

Related Posts

Leave a Comment