Bài 4: Làm việc với HTTPS, SSL và TLS
Bài này yêu cầu cài đặt một máy chủ web có hỗ trợ bảo mật với SSL/TLS trên một máy chủ và sử dụng Firefox browser kết nối đến nó từ một máy trạm. Các bước thực hiện như sau:
Bước 1: Cài đặt và cấu hình máy chủ web apache
Cài apache http server với lệnh yum. Máy chủ sau khi cài đặt đã được tự động cấu hình với file cấu hình /etc/httpd/conf/httpd.conf. Nếu không có lỗi gì xảy ra, có thể khởi động máy chủ với file cấu hình mặc định này bằng lệnh apachectl.
Sau khi khởi động máy chủ web apache, sử dụng Firefox web browser truy nhập vào địa chỉ http://127.0.0.1 để kiểm tra kết nối.
Tiếp theo, cần thiết lập thư mục dữ liệu trên máy chủ để các máy trạm truy nhập đến. Có hai cách là sử dụng DocumentRoot hoặc URL mapping. DocumentRoot là tham số trong file cấu hình apache cho phép xác định các file dữ liệu của máy chủ được đặt ở đâu. Các file này sẽ được truy nhập với địa chỉ URL mà không có thành phần thư mục (http://127.0.0.1). Có thể tìm tham số này trong file cấu hình /etc/httpd/conf/httpd.conf rồi tạo các thư mục con nằm bên trong thư mục DocumentRoot (ví dụ mywebpage). Khởi động lại máy chủ apache để nó đọc lại file cấu hình và dùng browser truy nhập theo địa chỉ có tên thư mục (http://127.0.0.1/mywebpage).
Phương pháp URL mapping cho phép thiết lập ánh xạ giữa các địa chỉ URL với các thư mục ở bất cứ đâu trên máy chủ, không nhất thiết phải nằm trong DocumentRoot. Khi thực hiện phương pháp này, một số vấn đề về quyền truy nhập thư mục cần được lưu ý. Đầu tiên cần xác định apache sử dụng user nào để đọc các thư mục. Nguyên lý hoạt động của apache là khi một browser truy nhập đến một thư mục web thông qua địa chỉ URL nào đó, máy chủ web apache thay mặt người sử dụng đọc các file trong thư mục tương ứng với quyền của user đang chạy tiến trình apache (thông thường user này là apache). Có thể sử dụng lênh ps aux để biết người sử dụng này là ai:
Nếu một thư mục web không được cấu hình quyền truy nhập để user apache có thể đọc được, lỗi sẽ xảy ra khi browser muốn truy nhập đến thư mục web này. Để đảm bảo quyền truy nhập thư mục, phương pháp đơn giản nhất là để thư mục web nằm trong thư mục home của user apache (thông thường là /var/www). Có thể đọc file /etc/passwd để xác định thư mục home của user apache:
Tiếp theo, tạo thư mục web và các file dữ liệu cần thiết trong thư mục home của user apache (giả sử là /var/www/myweb). Cuối cùng, thiếp lập URL mapping trong file cấu hình /etc/httpd/conf/httpd.conf để trỏ tới thư mục này.
Khởi động lại apache với lệnh apachectl -k, dùng web browser truy nhập đến địa chỉ http://127.0.0.1/myweb sẽ đọc được nội dung thư mục web đã chuẩn bị trên máy chủ.
Bước 2: Thiếp lập thư mục bảo mật trên máy chủ web
Để apache có thể làm việc với SSL/TLS, cần cài đặt thư viện mod_ssl:
Nếu cài đặt thành công, chế độ làm việc bảo mật SSL/TLS của apache đã được cấu hình mặc định theo file cấu hình /etc/httpd/conf.d/ssl.conf. Theo cấu hình mặc định này (tham số VirtualHost), một máy chủ apache “ảo” (gọi là máy chủ HTTPS để phân biệt với máy chủ apache đã thiết lập trong bước 1) đã được thiết lập để tiếp nhận và xử lý các truy nhập theo giao thức HTTPS tại cổng 443.
Tương tự như trong bước 1, thư mục web của máy chủ HTTPS này có thể được thiết lập theo hai cách - DocumentRoot và URL mapping. Để cho đơn giản, ta sẽ thay DocumentRoot trong máy chủ ảo bằng một thư mục nằm trong home của user apache (giả sử là /var/www/security).
Tạm thời trong bước này ta chưa xử lý chứng thư kỹ thuật số của máy chủ HTTPS. Thay vào đó, ta sử dụng chứng thư mặc định đi kèm với apache SSL/TLS:
Cuối cùng, dùng web browser truy nhập đến thư mục gốc của máy chủ HTTPS này, lần đầu tiên sẽ xuất hiện yêu cầu người sử dụng xác nhận chứng thư kỹ thuật số của máy chủ HTTPS:
Click chuột vào nút Advanced để xem và xác nhận chứng thư của máy chủ HTTPS này (bằng cách Add Exception), browser đã hoàn thành bước thiết lập phiên làm việc SSL/TLS và cho phép truy nhập vào thư mục gốc:
Bước 3: Cấu hình chứng thư kỹ thuật số cho máy chủ
Trong bước 2, ta đã sử dụng chứng thư kỹ thuật số mặc định đi kèm với apache SSL/TLS để cho phép browser truy nhập đến các vùng dữ liệu an toàn của máy chủ HTTPS. Chứng thư kỹ thuật số này được lưu lại trên browser sau khi được xác nhận lần đầu để sử dụng cho các lần tuy nhập tiếp theo. Khi truy nhập đến một địa chỉ web nào đó với giao thức HTTPS, browser kiểm tra đã có chứng thư kỹ thuật số của HTTPS server được lưu lại hay chưa, nếu đã có, nó tự động chấp nhận HTTPS server và hoàn thành bước thiết lập phiên làm việc SSL. Các chứng thư kỹ thuật số này có thể được xem trong browser. Với Firefox, chọn Preference/Advanced và “View Certificates”:
Trong bước này, ta sẽ tạo chứng thư kỹ thuật số mới cho máy chủ HTTPS. Một chứng thư kỹ thuật số gồm có 2 thành phần - khóa công khai (thường được gọi là các certificate, hay public key) và khóa bí mật (thường được gọi là private key). Lệnh openssl cho phép tạo ra bộ đôi này với các thông số đưa vào:
Sau khi bộ đôi khóa được tạo ra (khóa bí mật /etc/pki/tls/private/myapache.key và khóa công khai /etc/pki/tls/certs/myapache.crt), cần thiết lập lại các file khóa này trong fie cấu hình /etc/httpd/conf.d/ssl.conf:
Khởi động lại máy chủ HTTPS và phía client, xóa chứng thư cũ đã được lưu trữ từ trước cho máy chủ 127.0.0.1. Tiếp theo, truy nhập vào máy chủ HTTP ở địa chỉ https://127.0.0.1, browser sẽ hiển thị thông tin chứng thư để xác nhận. Có thể thấy các thông tin khi tạo chứng thư trên may chủ đã được lưu lại và hiển thị trong browser: