Chứng chỉ máy khách được xác thực, trao đổi đầu tiên hoàn tất, và rồi kết nối dừng lại với một lỗi về vòng xác thực bổ sung. Không có gì sai trong chuỗi chứng chỉ và không có gì trong mạng thay đổi. Cổng đã được cấu hình để đòi một bằng chứng thứ hai từ phía kết nối, và máy khách không bao giờ gửi nó. Quyết định ai chứng minh điều gì, theo thứ tự nào, chính là toàn bộ công việc, và nó bắt đầu bằng việc đọc chính sách từ điểm cuối bạn đang đứng. Hai bằng chứng khác loại, theo một thứ tự cố định, là một quyết định thiết kế chứ không phải một ô đánh dấu.

Triệu chứng: thất bại sau khi bằng chứng đầu tiên thành công

Trao đổi đầu tiên hoàn tất và nhật ký trông khỏe mạnh, cho đến khi cổng yêu cầu danh tính người dùng qua EAP. Bắt tay sau đó bị đình trệ hoặc trả về lỗi giao thức nêu tên vòng bổ sung. Một chứng chỉ máy hoàn toàn hợp lệ bị từ chối vì lý do không liên quan gì đến tính hợp lệ của nó. Chính sách đòi bằng chứng thứ hai, và câu trả lời của máy khách không bao giờ đến.

Cả hai mô tả về thất bại đó đều đúng tùy vào nơi bạn đứng. Từ phía máy khách, nó trông như một máy chủ từ chối chứng chỉ hợp lệ, và từ phía máy chủ, nó trông như một máy khách không thể hoàn tất đăng nhập. Cùng một sự kiện được đọc như vấn đề tin cậy trong nhật ký này và vấn đề năng lực trong nhật ký kia. Chỉ có chính sách đã cấu hình mới cho bạn biết đó là cái nào.

Tiện ích mở rộng thêm gì, và không thêm gì

IKEv2 mang một tiện ích mở rộng để chạy nhiều hơn một trao đổi xác thực trong một phiên. RFC 4739 phác họa, cùng với các chuỗi khác, một máy khách chứng minh danh tính bằng chứng chỉ rồi xác thực một người qua EAP. Tài liệu này mang trạng thái Thử nghiệm, nghĩa là không bản triển khai nào mắc nợ bạn tính năng đó. Đừng giả định gì về hỗ trợ cho đến khi phía bên kia thương lượng nó.

Cả hai bên đều phải hỗ trợ tiện ích mở rộng và đồng ý về nó trong quá trình trao đổi. Một cổng được cấu hình cho vòng thứ hai không thể buộc máy khách thực hiện một vòng, và một máy khách hỗ trợ nó sẽ không dùng nó trừ khi máy chủ yêu cầu. Chính sự bất đối xứng đó là lý do thất bại thường hiện ra như một lần hết thời gian hoặc lỗi giao thức thay vì một phát biểu rõ ràng về năng lực. Đọc cấu hình của một bên cho bạn biết một nửa điều sẽ xảy ra.

Một bằng chứng cho mỗi điểm cuối là hình dạng bình thường, và đây không phải thiết kế đó. Cổng trình bày chứng chỉ của nó, người dùng trả lời EAP, và mỗi bên đã xác thực bên kia đúng một lần. Hai bằng chứng đó đến từ các điểm cuối đối diện, nên không cái nào nói riêng điều gì về chiếc máy và người sử dụng nó.

EAP-TLS là hình dạng thứ ba, và nó cũng không phải hình dạng này. Ở đó, chứng chỉ máy khách được trình bày bên trong một phương thức EAP, nên máy khách vẫn hoàn tất một lần xác thực IKE duy nhất. Thông tin xác thực có thể trông giống hệt trường hợp nhiều vòng trong khi giao thức mang một vòng thay vì hai. Đó là lý do một thiết kế sao chép từ một triển khai EAP-TLS thất bại đúng tại điểm mà bằng chứng thứ hai được mong đợi.

Cùng một tệp đọc khác đi trên cổng

Cùng một tệp swanctl đọc khác đi tùy vào nơi nó chạy, và đó là phần khiến người ta vấp. Trên máy tính xách tay, cổng là bên kia, còn trên cổng thì máy tính xách tay là bên kia, nên hãy viết phía local là tôi là ai và phía remote là tôi sẽ chấp nhận ai. Một khối local mô tả điểm cuối này xác thực chính nó thế nào, và một khối remote nêu điều nó đòi hỏi từ đầu bên kia. Sao chép một khối giữa hai tệp đảo ngược ý nghĩa của nó mà không đổi một ký tự nào. So sánh hai tệp hầu như không cho bạn biết gì, vì cùng những từ đó mang nghĩa trái ngược trong mỗi tệp.

Vị trí của một mục đặt thứ tự của nó trừ khi một số vòng ghi đè lên. Vì vậy các mục local hoặc remote bổ sung mô tả các vòng bổ sung chứ không phải các lựa chọn thay thế, và số vòng tường minh trong tài liệu tham chiếu swanctl.conf tồn tại chính xác để làm cho thứ tự đó trở thành có chủ ý. Không có nó, việc di chuyển một khối sẽ thay đổi hành vi. Đó cũng là lý do hai cấu hình trông tương đương trên giấy có thể hành xử theo thứ tự ngược lại.

Quy tắc thứ tự đó tạo ra chế độ thất bại đáng nhớ. Một khối remote thứ hai không phải một lựa chọn khác có thể chấp nhận; nó là một đòi hỏi thứ hai, đó là lý do một chính sách đọc như hoặc/là hoặc lại hành xử như và-rồi. Một chính sách cổng có thể chấp nhận chứng chỉ của chiếc máy đã đăng ký rồi đòi trao đổi EAP của người dùng đó, theo thứ tự ấy.

Phân biệt các vòng với các yếu tố độc lập

Hai vòng không tự động là hai yếu tố độc lập. Lặp lại một bằng chứng, hay giữ hai thông tin xác thực trong cùng một kho, không mang lại sức mạnh mà thiết kế lẽ ra phải thêm. Tính độc lập là thuộc tính của cách các bí mật được giữ và điều gì làm chúng bị xâm phạm, không phải của số lần trao đổi mà giao thức chạy. Một thiết kế đếm các vòng như các yếu tố thì nói quá điều nó có. Sự phân biệt đó quan trọng nhất khi một câu hỏi tuân thủ hỏi lần đăng nhập thực sự dùng bao nhiêu yếu tố.

Chứng chỉ máy chứng minh việc sở hữu khóa đã được chấp nhận của nó, và không hơn. Nó không phải một chứng thực phần cứng và không phải một báo cáo sức khỏe thiết bị, nên một chính sách cần thông tin tư thế cần một cơ chế khác. Trường subject cũng không phải một nhãn kiểm kê bạn có thể tin, vì subject do người đã cấp hoặc đăng ký chứng chỉ chọn. Nếu thiết kế cần bằng chứng rằng chiếc máy khỏe mạnh, bằng chứng đó phải đến từ một thành phần đo chiếc máy.

Hãy viết ra mỗi vòng thực sự chứng minh điều gì trước khi thêm nó. Khi hai vòng chứng minh cùng một điều hai lần, cái thứ hai thêm độ trễ và phiếu hỗ trợ thay vì sự bảo đảm. Ghi chú đó cũng là thứ chặn một cuộc tranh luận về việc liệu vòng bổ sung có đáng chi phí của nó không.

Viết quy tắc ghép cặp và kiểm tra các lần từ chối

Quyết định danh tính máy nào được ghép với người nào, và viết quy tắc ở nơi thực thi. Hai thông tin xác thực hợp lệ đặt cạnh nhau không chứng minh gì về việc ghép cặp, vì ghép cặp là một quyết định ủy quyền chứ không phải kết quả xác thực. Hồ sơ đăng ký hoặc phần phụ trợ xác thực phải thực thi mối quan hệ mà tổ chức muốn.

Sau đó hãy kiểm tra điều đáng lẽ phải thất bại: một người dùng được chấp nhận trên chiếc máy chưa được phê duyệt, một người dùng chưa được phê duyệt đang giữ thông tin xác thực của máy, và một phía không thể thực hiện vòng bổ sung. Nếu cả ba lặng lẽ nhận cùng một quyền truy cập, chính sách mô tả một ý định thay vì thực thi nó. Hãy so sánh cấu hình đã khai báo với điều daemon báo cáo, vì một kết nối chưa từng khớp trông giống hệt một quy tắc đã đi qua:

swanctl --list-conns
swanctl --list-sas

Kiểm tra các vòng đã thương lượng và quyền ủy quyền kết quả, không chỉ lần đăng nhập thành công. Và đừng với tay lấy các thiết lập XAuth cũ của IKEv1 như một lối tắt: hãy khớp giao thức, các vai trò, thứ tự và hành vi thật của máy khách thay vì xóa một vòng bắt buộc cho đến khi kết nối thành công. Xóa vòng thất bại là cách một thiết kế hai bằng chứng lặng lẽ trở thành một thiết kế một bằng chứng mà không ai xem xét. Hãy giữ việc xóa trong bản ghi thay đổi.

Bài viết liên quan