0

Làm thế nào để cấu hình chứng chỉ SSL/TLS (HTTPS) cho Elasticsearch để mã hóa dữ liệu truyền tải trên môi trường production?

Để đưa Elasticsearch lên môi trường production, việc mã hóa đường truyền bằng HTTPS là bắt buộc để tránh bị đánh cắp dữ liệu (như mật khẩu hoặc dữ liệu nhạy cảm) khi truyền trên mạng.

Chúng ta sẽ sử dụng công cụ elasticsearch-certutil được tích hợp sẵn để tạo Certificate Authority (CA) nội bộ và cấp phát chứng chỉ SSL/TLS (định dạng PKCS#12 - .p12) cho tầng HTTP.

Dưới đây là quy trình thao tác từng bước trên server Linux:


1. Tạo Certificate Authority (CA) nội bộ

Sinh ra khóa gốc (Root CA). Di chuyển vào thư mục cài đặt của Elasticsearch và chạy lệnh để tạo CA. Khi được hỏi mật khẩu, bạn có thể nhập một mật khẩu an toàn hoặc nhấn Enter để bỏ qua (nếu muốn giữ trống).

cd /usr/share/elasticsearch/
sudo bin/elasticsearch-certutil ca

Kết quả: Lệnh này sẽ tạo ra một file tên là elastic-stack-ca.p12. File này đóng vai trò như "chữ ký gốc" để cấp phép cho toàn bộ các node trong hệ thống.


2. Tạo chứng chỉ SSL cho tầng HTTP

Sử dụng CA vừa tạo để tiếp tục tạo chứng chỉ SSL cho HTTP (HTTPS):

sudo bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 --name http-cert --out http.p12

Hệ thống sẽ yêu cầu bạn nhập mật khẩu của file CA (nếu có ở Bước 1) và đặt mật khẩu mới cho file http.p12. File http.p12 chính là chứng chỉ sẽ được gắn vào node.


3. Di chuyển chứng chỉ và cấp quyền (Permissions)

Bảo mật cấp hệ điều hành. Tạo một thư mục riêng biệt trong thư mục cấu hình để chứa chứng chỉ, di chuyển file vào đó và cấp quyền đọc cho user elasticsearch.

sudo mkdir -p /etc/elasticsearch/certs
sudo cp http.p12 /etc/elasticsearch/certs/

# Cấp quyền sở hữu cho tiến trình Elasticsearch
sudo chown -R elasticsearch:elasticsearch /etc/elasticsearch/certs/
sudo chmod 600 /etc/elasticsearch/certs/http.p12

4. Cấu hình lại file elasticsearch.yml

Khai báo xpack.security.http. Mở file elasticsearch.yml và thêm khối cấu hình sau vào cuối file để kích hoạt HTTPS:

# Kích hoạt SSL cho tầng HTTP (Client to Node)
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: certs/http.p12
xpack.security.http.ssl.truststore.path: certs/http.p12

5. Lưu mật khẩu chứng chỉ vào Keystore

Bảo mật mật khẩu chứng chỉ. Nếu ở Bước 2 bạn có đặt mật khẩu cho file http.p12, bạn KHÔNG ĐƯỢC ghi mật khẩu đó vào file yml. Hãy lưu nó vào Keystore nội bộ của Elasticsearch:

sudo bin/elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password
sudo bin/elasticsearch-keystore add xpack.security.http.ssl.truststore.secure_password

Nhập mật khẩu của file http.p12 khi màn hình terminal yêu cầu.


6. Khởi động lại và xác thực HTTPS

Kiểm tra kết quả. Khởi động lại dịch vụ để nạp cấu hình mới:

sudo systemctl restart elasticsearch

Sau đó, dùng lệnh curl với cờ -k (bỏ qua xác minh chứng chỉ tự ký) và giao thức https:// để kiểm tra kết nối:

curl -k -X GET "https://localhost:9200/" -u elastic:mat_khau_cua_ban

Nếu trả về thông tin JSON bình thường, bạn đã mã hóa thành công!


⚠️ Lỗi phổ biến: AccessDeniedException

Nếu Elasticsearch crash và không thể khởi động sau bước này, 90% nguyên nhân là do user elasticsearch không có quyền đọc file .p12. Hãy kiểm tra lại log (/var/log/elasticsearch/) và chạy lại chính xác lệnh chown ở Bước 3.


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.