Cài đặt SSL cho máy chủ gốc dùng chữ ký số của Cloudflare

Django Developer
Hướng dẫn cài đặt SSL cho máy chủ web như nginx có thời hạn lên đến 15 năm.

Cloudflare từ nhiều năm nay vẫn giữ vai trò là người trung gian cung cấp miễn phí SSL cho các website mà không cần cài đặt thêm bất cứ cái gì.

Ở mức mã hóa Flexible chúng ta không cần phải bật SSL khi gửi nhận thông tin từ máy chủ gốc đến máy chủ cache của Cloudflare. Điều này rất nguy hiểm vì các dữ liệu nhạy cảm được gửi thông qua internet mà không có bất cứ cơ chế bảo mật đang kể nào.

Trước đây tôi dùng Let's Encrypt cho máy chủ của mình, 3 tháng kỳ hạn cũng không phải là ngắn. Nhưng phiền phức bắt đầu tới khi tôi phải quản lý 1 lúc gần 20 máy chủ web. Vậy là tôi phải tìm cách tự động hóa bằng cách xác thực thông qua một máy chủ ACME DNS (https://github.com/joohoi/acme-dns) kết nối với API của Cloudflare.

Cách trên hoạt động khá tốt lúc đầu nhưng khó để thực hiện cơ chế retry nếu xuất hiện lỗi. Bash script cũng không quá linh hoạt để thực hiện mọi thứ (hoặc có thể do tôi chưa đầu tư đủ thời gian). Thành thật mà nói, tôi coi đây là việc nhỏ và cần phải giải quyết nhanh nhất nên giải pháp nào ít tốn công sức và thời gian thì sẽ được chọn.

Cuối cùng thì một người bạn đã đề xuất dùng chữ ký số của Cloudflare cung cấp, thời hạn cho mỗi chữ ký có thể lên đến 15 năm. Quá tuyệt vời!

Tiến hành thực hiện tạo chứng chỉ

Bạn vào mục SSL/TLS trong mỗi domain của Cloudflare Dashboard thì sẽ thấy phần Origin Server:

Lần lượt tạo chứng chỉ mới bằng các thao tác như trong các hình bên dưới:

Lưu Origin Certificate thành file domain.com.pem; Private Key thành domain.com.key. Thực ra, bạn thích đặt tên như thế nào cũng được, miễn là biết tác dụng của chúng.

Tham khảo hướng dẫn chính thức của Cloudflare: https://developers.cloudflare.com/ssl/origin-configuration/origin-ca/

Hướng dẫn cài đặt chứng chỉ vào nginx

Cấu hình SSL cho một domain trong nginx sẽ trông như thế này:

server {
    listen              443 ssl;
    server_name         domain.com;
    ssl_certificate     /home/user1/domain.com/ssl/bundle.crt;
    ssl_certificate_key /home/user1/domain.com/ssl/domain.com.key;
    ...
}

Bạn để ý, chúng ta cần có file bundle.crt, đây là một file nối giữa các chứng chỉ với nhau theo thứ tự.

Bước 1: Tải chứng chỉ Cloudflare Origin CA về và để vào chung thư mục với 2 files nhắc ở trên: https://developers.cloudflare.com/ssl/static/origin_ca_ecc_root.pem

Bước 2: Chạy lệnh sau để nối các chứng chỉ:

cat domain.com.pem origin_ca_ecc_root.pem >> bundle.crt

Sau khi biên tập file cài đặt hợp lý, bạn nhớ chạy lệnh để khởi động lại máy chủ nginx.

sudo nginx -s reload

Kết bài

Nhớ lưu ý giúp tôi là chứng chỉ của Cloudflare không valid một cách mặc định trên các trình duyệt. Nếu cần, bạn có thể làm theo hướng dẫn sau để cài đặt bằng tay vào các thiết bị mong muốn: https://developers.cloudflare.com/cloudflare-one/connections/connect-devices/warp/install-cloudflare-cert/.

Bạn phải chuyển chế độ cài đặt SSL của domain trong Cloudflare thành Full (strict) để các cài đặt có ý nghĩa.

Sử dụng chứng chỉ của Cloudflare thì phải luôn bật "biểu tượng đám mây" bên trong dashboard, nghĩa là phải luôn để Cloudflare làm trung gian cho traffic của website của bạn. Tại Việt Nam, thỉnh thoảng đứt cáp thì sẽ bị ảnh hưởng kha khá đấy. Cái này khi quản lý máy chủ phải tùy cơ ứng biến thôi chứ không có tiêu chuẩn cụ thể.

Nếu muốn chọn nhà cung cấp trả phí mà thời hạn chứng chỉ lâu dài (tối đa 5 năm) thì có thể thử cân nhắc PositiveSSL. Giá của nó cũng khá rẻ, tầm 3 USD/năm.

Công nghệ được nhắc đến trong bài viết này

Tên Công NghệPhiên BảnPhát Hành
nginx1.22+--
4 phút đọc·648 lượt xem·2 years ago