Tạo chứng chỉ số tự ký trên Apache Centos 8 (self-signed-ssl-certificate)
Cài đặt chứng chỉ số Tự ký là một công việc có nhiều ứng dụng. Chứng chỉ số cho phép bạn tạo kênh truyền bảo mật trên mạng, nhằm đảm bảo an toàn dữ liệu truyền đi mà không bị theo dõi lắng nghe trên đường truyềnGiới thiệu
TLS hay còn gọi là “bảo mật lớp Transport - Truyền tải” - và SSL phiên bản trước của nó - là các giao thức được sử dụng để mã hóa bảo mật dữ liệu mạng. Sử dụng công nghệ này, các máy chủ có thể gửi thông tin đến máy khách một cách an toàn mà không bị bên ngoài chặn hoặc đọc thông tin truyền đi giữa chừng.
Trong hướng dẫn này, ta sẽ chỉ cho bạn cách tạo và sử dụng chứng chỉ SSL tự ký với máy chủ web Apache trên CentOS 8.
Lưu ý: Chứng chỉ tự ký sẽ mã hóa giao tiếp giữa máy chủ của bạn và máy khách của nó. Vì nó không được ký bởi bất kỳ tổ chức phát hành chứng chỉ nào được xác nhận trong trình duyệt web và hệ điều hành, nên người dùng không thể sử dụng chứng chỉ để xác thực danh tính máy chủ của bạn. Do đó, người dùng của bạn sẽ thấy lỗi bảo mật khi truy cập trang web.
Vì hạn chế này, chứng chỉ tự ký không phù hợp với môi trường phục vụ công khai, kinh doanh. Chúng thường được sử dụng để thử nghiệm hoặc để bảo mật nội bộ.
Để có giải pháp chứng chỉ được chứng thực công khai, có thể dùng Let's Encrypt, một tổ chức cung cấp chứng chỉ miễn phí. Bạn có thể cài đặt chứng chỉ Let's Encrypt trong hướng dẫn Cách bảo mật Apache bằng Let's Encrypt trên CentOS 8.
Yêu cầu
Trước khi bắt đầu hướng dẫn này, bạn sẽ cần những thứ sau:
- Truy cập vào máy chủ CentOS 8 với người dùng không cần root, đã bật sudo. Hướng dẫn Thiết lập Máy chủ Ban đầu với CentOS 8 có hướng dẫn cách tạo tài khoản này.
-
Bạn cũng sẽ cần cài đặt Apache, có thể cài đặt Apache bằng
dnf
:- sudo dnf install httpd
Bật Apache và khởi động nó bằng
systemctl
:- sudo systemctl enable httpd
- sudo systemctl start httpd
Và nếu có một
firewalld
được chạy thì hãy mở cổnghttp
vàhttps
:- sudo firewall-cmd --permanent --add-service=http
- sudo firewall-cmd --permanent --add-service=https
- sudo firewall-cmd --reload
Bước 1 - Cài đặt mod_ssl
Trước tiên ta cần cài đặt mod_ssl
, một mô-đun Apache cung cấp hỗ trợ cho mã hóa SSL.
Cài đặt mod_ssl
bằng lệnh dnf
:
- sudo dnf install mod_ssl
Cần khởi động lại Apache một lần để tạo đúng chứng chỉ SSL và khóa mặc định, nếu không sẽ gặp lỗi '/etc/pki/tls/certs/localhost.crt' does not exist or is empty
.
- sudo systemctl restart httpd
Mô-đun mod_ssl
đã được kích hoạt và sẵn sàng sử dụng.
Bước 2 - Tạo chứng chỉ SSL
Apache đã sẵn sàng để sử dụng mã hóa, ta có thể chuyển sang tạo chứng chỉ SSL mới. Chứng chỉ sẽ lưu trữ một số thông tin cơ bản về trang web của bạn và sẽ được kèm theo một tệp khóa cho phép máy chủ xử lý dữ liệu được mã hóa một cách an toàn.
Ta có thể tạo khóa SSL và các tệp chứng chỉ bằng lệnh openssl
:
- sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/pki/tls/private/apache-selfsigned.key -out /etc/pki/tls/certs/apache-selfsigned.crt
Sau khi nhập lệnh, bạn sẽ được nhắc nhập thông tin về trang web của mình. Trước khi xem xét điều đó, hãy xem điều gì đang xảy ra trong lệnh trên:
openssl
: Đây là công cụ dòng lệnh để tạo và quản lý chứng chỉ OpenSSL, khóa và các tệp khác.req -x509
: Điều này chỉ định sử dụng quản lý yêu cầu ký chứng chỉ (CSR) X.509. X.509 là tiêu chuẩn cơ sở hạ tầng khóa công khai mà SSL và TLS tuân thủ để quản lý khóa và chứng chỉ.-nodes
: yêu cầu OpenSSL bỏ qua tùy chọn bảo mật chứng chỉ của ta bằng cụm mật khẩu. Có thể lựa chọn nhập mật khẩu bảo mật chứng chỉ mỗi khi apache khởi động hoặc không, là do tùy chọn này.-days 365
: Tùy chọn này đặt khoảng thời gian mà chứng chỉ sẽ được coi là hợp lệ, ta đặt nó trong một năm ở đây. Nhiều trình duyệt hiện đại sẽ từ chối bất kỳ chứng chỉ nào có hiệu lực trên một năm nhằm nâng cao bảo mật.-newkey rsa:2048
: Điều này chỉ định rằng ta muốn tạo chứng chỉ mới và khóa mới cùng một lúc. Ta đã không tạo khóa cần thiết để ký chứng chỉ ở bước trước, vì vậy ta cần tạo khóa cùng với chứng chỉ. Phầnrsa:2048
yêu cầu nó tạo một khóa RSA dài 2048 bit.-keyout
: Dòng này cho OpenSSL biết nơi đặt tệp khóa cá nhân đã tạo mà ta sẽ tạo.-out
: Điều này cho OpenSSL biết nơi đặt chứng chỉ sẽ tạo.
Điền vào các lời nhắc một cách thích hợp. Dòng quan trọng nhất là yêu cầu Common Name
. Bạn cần nhập tên máy chủ mà bạn sẽ sử dụng để truy cập vào máy chủ hoặc IP công khai của máy chủ. Quan trọng là trường này phải khớp với bất cứ thứ gì bạn sẽ đưa vào thanh địa chỉ của trình duyệt để truy cập trang web, vì không khớp sẽ gây ra nhiều lỗi bảo mật được báo.
Danh sách đầy đủ các lời nhắc sẽ trông giống như sau:
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 các thư mục con thích hợp trong/etc/pki/tls
. Đây là một thư mục chuẩn được cung cấp bởi CentOS cho mục đích này.
Tiếp theo, ta 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.
Bước 3 - Định cấu hình Apache để sử dụng SSL
Bây giờ ta đã có chứng chỉ và khóa tự ký, cần cập nhật cấu hình Apache để sử dụng chúng. Trên CentOS, bạn có thể đặt các tệp cấu hình Apache mới (chúng phải kết thúc bằng .conf
) vào /etc/httpd/conf.d
và chúng sẽ được tải vào lần tiếp theo Apache khởi động lại.
Với hướng dẫn này, ta sẽ tạo một tệp cấu hình tối thiểu. Nếu bạn đã thiết lập Apache <Virtualhost>
và chỉ cần thêm SSL vào nó, bạn có thể cần sao chép các dòng cấu hình bắt đầu với SSL
và chuyển cổng VirtualHost
từ 80
sang 443
. Rồi ta sẽ xử lý tối ưu cổng 80
trong bước tiếp theo.
Mở một tệp mới trong thư mục /etc/httpd/conf.d
:
- sudo vi /etc/httpd/conf.d/your_domain_or_ip.conf
Dán vào cấu hình VirtualHost cơ bản sau:
<VirtualHost *:443>
ServerName your_domain_or_ip
DocumentRoot /var/www/ssl-test
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/apache-selfsigned.crt
SSLCertificateKeyFile /etc/pki/tls/private/apache-selfsigned.key
</VirtualHost>
Đảm bảo cập nhật dòng ServerName
theo cách domain máy chủ của mình. Đây có thể là tên máy chủ, tên miền đầy đủ hoặc địa chỉ IP. Đảm bảo bạn chọn phù hợp với Common Name
bạn đã chọn khi tạo chứng chỉ.
Các dòng còn lại chỉ định thư mục DocumentRoot
và các tệp chứng chỉ và khóa mới đã được tạo.
Bây giờ, hãy tạo DocumentRoot
của Ta và đặt một tệp HTML vào đó để thử nghiệm:
- sudo mkdir /var/www/ssl-test
Mở index.html
mới bằng soạn thảo văn bản Vi:
- sudo vi /var/www/ssl-test/index.html
Với nội dung sau:
<h1>it worked!</h1>
Đây không phải là một tệp HTML đầy đủ, chỉ dùng để test.
Lưu và đóng tệp, sau đó kiểm tra cấu hình Apache của bạn để tìm lỗi cú pháp bằng cách nhập:
- sudo apachectl configtest
Bạn có thể thấy một số cảnh báo, nhưng miễn là đầu ra kết thúc bằng Syntax OK
. Nếu dòng đó không có trong kết quả, hãy kiểm tra cú pháp của các file cấu hình trên và thử lại.
Khi mọi thứ đều ổn, hãy khởi động lại Apache để nhận các thay đổi cấu hình:
- sudo systemctl reload httpd
Vào trang web của bạn trong trình duyệt, đảm bảo sử dụng https://
ngay từ đầu.
Bạn sẽ thấy báo lỗi. Điều này là bình thường đối với một chứng chỉ tự ký! Trình duyệt đang cảnh báo bạn rằng nó không thể xác minh danh tính của máy chủ vì chứng chỉ của Ta không được ký bởi bất kỳ cơ quan cấp chứng chỉ đã biết nào của trình duyệt. Đối với mục đích thử nghiệm và sử dụng cá nhân, điều này không vấn đề gì. Bạn sẽ có thể nhấp qua thông tin nâng cao hoặc thông tin khác và chọn tiếp tục.
Sau đó trình duyệt của bạn cho ra dòng text: it worked!
mà ta đã gõ vào file index.html ở trên.
Lưu ý: nếu trình duyệt của bạn không kết nối với máy chủ, hãy đảm bảo rằng kết nối không bị tường lửa chặn. Nếu bạn đang sử dụng firewalld
, các lệnh sau sẽ mở cổng 80
và 443
:
- sudo firewall-cmd --permanent --add-service=http
- sudo firewall-cmd --permanent --add-service=https
- sudo firewall-cmd --reload
Tiếp theo, Ta sẽ thêm một phần VirtualHost
khác vào cấu hình của mình để phục vụ các yêu cầu HTTP mặc định cổng 80 và chuyển hướng chúng đến HTTPS (cổng 443).
Bước 4 - Chuyển hướng HTTP sang HTTPS
Hiện tại, cấu hình của Ta sẽ chỉ phản hồi các yêu cầu HTTPS trên cổng 443
. Ta cần truy cập cả trên cổng 80
không được mã hóa. Thiết lập VirtualHost
để phản hồi các yêu cầu cổng 80 sang 443 - HTTPS.
Mở cùng một tệp cấu hình Apache mà Ta đã bắt đầu ở các bước trước:
- sudo vi /etc/httpd/conf.d/your_domain_or_ip.conf
Ở dưới cùng, tạo một khối VirtualHost
khác để khớp với các yêu cầu trên cổng 80
. Sử dụng lệnh ServerName
để khớp lại với tên miền hoặc địa chỉ IP của bạn. Sau đó, sử dụng Redirect
để khớp với bất kỳ yêu cầu nào và gửi chúng đến SSL VirtualHost
. Đảm bảo bao gồm dấu gạch chéo sau:
<VirtualHost *:80>
ServerName your_domain_or_ip
Redirect / https://your_domain_or_ip/
</VirtualHost>
Lưu và đóng tệp này khi bạn hoàn tất, sau đó kiểm tra lại cú pháp cấu hình và tải lại Apache:
- sudo apachectl configtest
- sudo systemctl reload httpd
Bạn có thể kiểm tra chức năng chuyển hướng mới bằng cách truy cập trang web của mình với http://
đơn giản phía trước địa chỉ. Bạn sẽ tự động được chuyển hướng đến https://
.
Kết luận
Vậy bạn đã hoàn tất cấu hình Apache để phục vụ các yêu cầu được mã hóa bằng chứng chỉ SSL tự ký, đồng thời có chuyển hướng các yêu cầu HTTP không được mã hóa đến HTTPS.
Nếu bạn đang lên kế hoạch sử dụng SSL cho một trang web công cộng, được chứng nhận công khai hợp lệ, bạn nên xem xét việc mua một tên miền và sử dụng một tổ chức phát hành chứng chỉ miễn phí như Let's Encrypt .
Để biết thêm thông tin về cách sử dụng Let's Encrypt with Apache, vui lòng đọc hướng dẫn Cách bảo mật Apache bằng Let's Encrypt trên CentOS 8 .
Các tin trước
Tối ưu SQL với Index, FullText Search 2020-08-10
Cài đặt Node.js trên Ubuntu 18.04 2020-08-06
Bảo mật Apache với Lets Encrypt 2020-08-06
Thực hành bài LAB Toàn tập Select SQL Query 2020-08-05
Cài đặt XAMPP Trên Hệ điều hành Windows 2020-08-05
Toàn tập SQL - Bài tập Lệnh SELECT Database Toàn tập - tinh gọn nhất 2020-08-03
Cài đặt MySQL trên Ubuntu 20.04 2020-07-30
Cấu hình sudoers file trên Ubuntu và Centos 2020-07-07
Tạo sudo cho user mới trên Ubuntu 20.04 [Quickstart] 2020-06-22
Cài đặt và sử dụng Docker trên Ubuntu 20.04 2020-06-09