Bảo mật & quyền riêng tư

Bảo mật TLS nội bộ với ACME proxy và ủy quyền DNS

Một hướng dẫn mới chi tiết cách sử dụng ACME proxy và máy chủ DNS cục bộ để cấp phát chứng chỉ công khai cho các dịch vụ nội bộ mà không cần lộ khóa API.

Minh họa các máy chủ nội bộ an toàn với chứng chỉ TLS hợp lệ
Ảnh minh họa tạo riêng cho bài viết

Bài được dịch tự động từ bản gốc tiếng Anh.

Các môi trường tự quản lý (self-hosted) thường gặp khó khăn trong việc lấy chứng chỉ TLS hợp lệ cho những dịch vụ không thể truy cập trực tiếp từ internet. Một hướng dẫn kỹ thuật gần đây của Sapiolab phác thảo một kiến trúc vững chắc sử dụng ACME proxy và máy chủ DNS chuyên dụng để giải quyết khoảng trống kết nối này. Được xuất bản vào ngày 15 tháng 10 năm 2026, bài viết cung cấp phương pháp từng bước cho các nhà vận hành homelab và đội ngũ IT nhỏ để tự động hóa việc cấp phát chứng chỉ một cách an toàn.

Điều gì đã xảy ra

Thách thức cốt lõi được giải quyết là hạn chế của các phương thức xác thực ACME tiêu chuẩn đối với máy chủ nội bộ. Thử thách HTTP-01 yêu cầu máy chủ phải có thể truy cập được từ internet công cộng, điều thường không khả thi hoặc không an toàn cho cơ sở hạ tầng riêng tư. Thử thách DNS-01 yêu cầu quyền truy cập API vào nhà cung cấp DNS uy tín, gây ra rủi ro bảo mật nếu thông tin đăng nhập bị lộ trên các máy nội bộ. Giải pháp đề xuất liên quan đến việc triển khai một ACME proxy hoạt động như trung gian giữa các khách hàng nội bộ và các Tổ chức Cấp phát Chứng chỉ (Certificate Authorities - CA) công cộng.

Proxy này chuyển đổi các yêu cầu xác thực nội bộ thành lệnh DNS-01 bên ngoài. Để tránh lộ khóa API DNS chính, thiết lập này sử dụng một máy chủ ACME DNS riêng biệt. Máy chủ cục bộ này xử lý các bản ghi thử thách thông qua mẹo ủy quyền CNAME, cho phép các CA công cộng xác minh quyền sở hữu tên miền mà không cần truy cập vào vùng DNS chính. Hướng dẫn đi qua các bước cài đặt MariaDB, NGINX, Step CA và Unbound để tạo ra một quy trình cấp phát chứng chỉ hoàn toàn tự động và an toàn.

Chi tiết chính

  • Kiến trúc sử dụng Step CA hoặc Lab-CA để quản lý chứng chỉ nội bộ, trong đó Step CA được đánh giá là nhẹ nhàng và đơn giản hơn để cài đặt.
  • Một ACME proxy dịch các yêu cầu HTTP-01 hoặc DNS-01 nội bộ thành lệnh DNS-01 bên ngoài cho các CA công cộng như Let’s Encrypt hoặc ZeroSSL.
  • External Account Binding (EAB) có thể nhóm nhiều tài khoản nội bộ dưới một tài khoản bên ngoài, mặc dù hành vi xác minh tên miền có thể khác nhau tùy theo nhà cung cấp.
  • ACME DNS đóng vai trò là cầu nối, lưu trữ các bản ghi TXT _acme-challenge cục bộ trong khi CA công cộng theo dõi bản ghi CNAME để tìm chúng.
  • Thiết lập yêu cầu cấu hình split-DNS sử dụng Unbound để phân giải đúng các truy vấn nội bộ trong khi ủy quyền các tên miền con thử thách.
  • Chứng chỉ riêng tư tránh nhật ký Certificate Transparency nhưng yêu cầu cài đặt kho lưu trữ tin cậy thủ công trên mọi thiết bị khách và hình ảnh container.

Bối cảnh

ACME là giao thức được hầu hết các Tổ chức Cấp phát Chứng chỉ hiện đại sử dụng để tự động hóa việc cấp phát chứng chỉ TLS. Nó dựa vào các thử thách để chứng minh quyền sở hữu tên miền. HTTP-01 đặt một tệp trên máy chủ web, trong khi DNS-01 thêm một bản ghi văn bản cụ thể vào vùng DNS của tên miền. Đối với máy chủ nội bộ, không có phương thức nào là đơn giản vì máy chủ bị ẩn sau tường lửa, và việc cấp quyền truy cập API DNS cho mọi dịch vụ nội bộ tạo ra bề mặt tấn công bảo mật đáng kể.

Nhật ký Certificate Transparency là sổ cái công khai ghi lại tất cả các chứng chỉ công đã được cấp. Mặc dù điều này nâng cao bảo mật tổng thể của internet, nó cũng cho phép kẻ tấn công khám phá các tên miền con và dịch vụ mới. Các Tổ chức Cấp phát Chứng chỉ riêng tư tránh các nhật ký này nhưng đưa vào gánh nặng vận hành, vì mỗi thiết bị và ứng dụng phải được cấu hình để tin tưởng chứng chỉ gốc riêng tư. Điều này đặc biệt khó khăn trong các môi trường hỗn hợp sử dụng Docker container hoặc các ngôn ngữ như Python duy trì kho lưu trữ chứng chỉ riêng.

Tại sao điều này quan trọng

Đối với các đội ngũ chạy phần mềm tự quản lý, việc duy trì chứng chỉ TLS hợp lệ là rất quan trọng cho bảo mật và tuân thủ. Chứng chỉ hết hạn hoặc không hợp lệ làm hỏng tích hợp, gây ra cảnh báo trình duyệt và xói mòn niềm tin người dùng. Tự động hóa quy trình này giảm bớt gánh nặng quản trị cho các kỹ sư DevOps, những người nếu không sẽ phải phụ thuộc vào các script gia hạn thủ công hoặc chứng chỉ tĩnh có thời hạn dài. Mẫu ACME proxy cho phép các tổ chức sử dụng chứng chỉ công đáng tin cậy cho các dịch vụ nội bộ mà không làm tổn hại đến bảo mật mạng bằng cách mở các cổng vào.

Hơn nữa, tách biệt cơ chế xác thực DNS khỏi nhà cung cấp DNS chính giới hạn phạm vi thiệt hại của một rò rỉ thông tin đăng nhập tiềm năng. Nếu một dịch vụ nội bộ bị xâm phạm, kẻ tấn công chỉ có quyền truy cập vào máy chủ ACME DNS hạn chế, không phải khả năng sửa đổi các bản ghi DNS quan trọng như MX hoặc A cho tên miền chính. Cách tiếp cận phòng thủ đa lớp này là thiết yếu cho các công ty vừa và nhỏ tự quản lý cơ sở hạ tầng nhưng thiếu các đội ngũ bảo mật lớn.

Bạn có thể làm gì

  • Đánh giá xem các dịch vụ nội bộ của bạn có chịu được gánh nặng vận hành của việc quản lý kho lưu trữ tin cậy CA riêng tư trên tất cả các khách hàng hay không.
  • Triển khai một ACME proxy như mô tả với Step CA để xử lý các yêu cầu chứng chỉ từ mạng nội bộ.
  • Thiết lập một phiên bản ACME DNS chuyên dụng để xử lý các bản ghi thử thách, tránh nhu cầu lộ khóa API DNS chính.
  • Cấu hình các bản ghi CNAME trong vùng DNS công khai của bạn để ủy quyền các tên miền con _acme-challenge cho máy chủ ACME DNS cục bộ của bạn.
  • Triển khai DNS split-horizon sử dụng các công cụ như Unbound để đảm bảo các khách hàng nội bộ phân giải dịch vụ đúng cách trong khi các trình xác thực bên ngoài có thể tiếp cận các bản ghi thử thách.
  • Giám sát chủ động ngày hết hạn chứng chỉ, vì các hệ thống tự động vẫn có thể thất bại do thay đổi mạng hoặc trôi dạt cấu hình.

Tin khác

Tất cả tin