Dán một hồ sơ tls-crypt-v2 vào phiếu hỗ trợ trông vô hại cho đến khi bạn đếm xem tệp chứa gì. Khóa kênh điều khiển của máy khách nằm cạnh một bản sao mã hóa của chính khóa đó, và đối tượng thứ ba, khóa gói, không bao giờ rời khỏi máy chủ chấp nhận. Ba thứ đó trả lời những câu hỏi khác nhau về lưu giữ, chia sẻ và ngừng sử dụng. Tách chúng ra giải quyết phần lớn tranh luận chính sách trước khi bắt đầu.

Hồ sơ thực sự chứa gì

Nửa máy khách của tls-crypt-v2 là một khóa cộng với bản sao được gói của nó. Máy khách dùng khóa thường để bảo vệ kênh điều khiển và giao bản sao được gói cho máy chủ trong lúc thiết lập, nên máy chủ khôi phục đúng khóa đó mà không lưu bản sao văn bản rõ cho từng máy khách. Khóa gói làm cho việc khôi phục đó khả thi và chỉ thuộc về phía chấp nhận. Mọi thứ dưới đây bắt nguồn từ nơi ba đối tượng đó sống.

ObjectWhere it livesWhat can open itWhat a leak costs
Server wrapping keyaccepting servers onlythe unwrap step inside the serverevery wrapped copy issued to that group becomes readable
Wrapped client keyinside the client profilethe server wrapping keyit names a client and exposes its metadata, but not the key inside
Client control keyinside the client profile, usable as-isthe client that owns itsomeone can open handshakes as that client until the server refuses the key

Đọc bảng theo cách lưu giữ, không theo tên, và hậu quả tự hiện ra. Mất khóa gói là sự kiện đắt đỏ, vì không gì trong hồ sơ có thể tái tạo nó và cách khôi phục trung thực là phát hành lại nhóm. Một hồ sơ bị lộ rẻ hơn nhưng phổ biến hơn nhiều, vì người ta dán hồ sơ vào phiếu với niềm tin rằng bản sao được gói khiến tệp an toàn để chia sẻ. Hai thất bại cần những phản ứng khác nhau, và đó là lý do các đối tượng được giữ riêng.

Vì sao bản sao được gói không phải toàn bộ câu chuyện

Hồ sơ mang vật liệu máy khách dùng được cùng với bản đối ứng được gói của nó, nên bảo vệ bản sao cho máy chủ không nói gì về việc bảo vệ tệp. Blob an toàn để truyền và không an toàn để công bố. Siêu dữ liệu bên trong hiển thị với bất kỳ ai nhận blob, kể cả người sau này đọc phiếu mà nó được dán vào.

Coi hồ sơ là thông tin xác thực chứ không phải mẫu cấu hình. Một tệp bị lộ cho người giữ nó một danh tính máy khách hoạt động cho đến khi máy chủ ngừng chấp nhận danh tính đó, và việc gói không làm gì với khoảng thời gian đó. Phát hành một hồ sơ cho mỗi máy khách để việc thu hồi vẫn là quyết định về một tệp, và sao lưu khóa gói tách khỏi cấu hình máy chủ mà nó cho phép. Cả hai thói quen đều không sửa hồ sơ đã bị xâm phạm, nhưng cả hai quyết định tốc độ ngăn chặn cái tiếp theo.

Móc xác minh nằm ở đâu trong bắt tay

Móc xác minh chạy trước khi ngăn xếp TLS được lộ ra, và nhiệm vụ của nó là kiểm tra siêu dữ liệu được mang trong blob đã gói. Nó nhận siêu dữ liệu đó cùng một môi trường nhỏ, có tài liệu, và có ít vật liệu để làm việc hơn móc xác thực. Giả định rằng nó thấy tên người dùng, trạng thái phiên hoặc biến plugin là cách thông thường để viết móc này kém. Đọc mục hướng dẫn của chính móc thay vì vay mượn kỳ vọng từ móc khác.

Trạng thái thoát của nó là quyết định: kết quả khác không từ chối máy khách và kết quả không cho phép bắt tay tiếp tục. Vì vậy chính sách phải nói điều gì xảy ra khi thiếu siêu dữ liệu, không phân tích được hoặc bất ngờ. Viết đường từ chối trước, rồi quyết định giá trị nào chấp nhận được.

tls-crypt-v2 /etc/openvpn/server/tcv2-server.key
tls-crypt-v2-verify /etc/openvpn/server/verify-client-metadata.sh

Hai dòng đó là bề mặt chính sách trên máy chủ: một dòng nêu tên khóa gói, dòng kia nêu tên chương trình phán xét từng máy khách. Mọi thứ thú vị sống trong script, thứ xứng đáng được kiểm soát phiên bản và xem xét như mọi quy tắc truy cập khác.

Tài khoản, chứng chỉ và khóa điều khiển ngừng riêng

Chấp nhận sớm kênh điều khiển không phải xác thực, vì nó xảy ra trước kiểm tra danh tính TLS và trước mọi ủy quyền tài khoản. Vô hiệu hóa tài khoản, thu hồi chứng chỉ và từ chối khóa điều khiển máy khách là ba hành động với ba cơ chế. Một triển khai chỉ làm một trong số đó có lỗ hổng chứ không phải chính sách. Đối chiếu ba thứ một cách có chủ đích, và ghi lại bước nào thực thi thẩm quyền nào.

Thời điểm là khác biệt thứ hai. Danh sách chấp nhận đã thay đổi áp dụng cho các bắt tay mới, trong khi các phiên đã thiết lập tiếp tục chạy cho đến khi có gì đó kết thúc chúng. Đếm các mục trong danh sách mới làm bằng chứng rằng phiên cũ đã kết thúc là cách một máy khách đã bị xóa vẫn kết nối hàng giờ.

Thẩm quyền không được đối chiếu để lại hai lỗ dễ tìm trong thực tế. Một tài khoản có thể bị vô hiệu hóa trong khi khóa điều khiển của nó vẫn mở bắt tay, và một chứng chỉ có thể bị thu hồi trong khi chính sách siêu dữ liệu vẫn chấp nhận cùng máy khách đó. Cả hai là cùng một lỗi ở những nơi khác nhau, vì người vận hành coi một danh sách là toàn bộ thẩm quyền. Đặt ba danh sách cạnh nhau khi xóa và lỗi trở nên nhìn thấy được.

Phát hành và thu hồi hồ sơ

Phát hành là nửa dễ: tạo khóa máy khách ở phía chấp nhận, giao hồ sơ cho đúng một chủ sở hữu, giữ vật liệu gói trong giới hạn và chạy cùng chương trình xác minh trên mọi máy chủ chấp nhận. Chấp nhận rẻ là thuộc tính của cả nhóm, không phải của máy chủ mới nhất. Một máy chủ thứ hai với script cũ hơn hoặc lỏng hơn âm thầm trở thành đường yếu nhất trong triển khai.

Thu hồi cần ba bước theo thứ tự có chủ đích. Từ chối máy khách trong móc xác minh để các bắt tay mới thất bại, thu hồi chứng chỉ của nó nếu dùng PKI và vô hiệu hóa tài khoản để ủy quyền sau này không còn gì để ủy quyền. Sau đó kết thúc các phiên mà việc chấp nhận cũ cho phép, vì chúng sẽ không nhận ra bất kỳ điều nào trong ba. Luyện tập trình tự trên một máy khách mà bạn có thể chấp nhận làm hỏng.

Siêu dữ liệu trong hồ sơ là đầu vào cho chính sách đó, không phải bằng chứng rằng kiểm soát truy cập đã tồn tại. Tài liệu thiết kế OpenVPN 2.6 mô tả các đối tượng và ranh giới chúng vạch ra, trong khi việc thực thi vẫn thuộc người vận hành.

Bài viết liên quan