Màn hình Android IKEv2 yêu cầu cả chứng chỉ người dùng và chứng chỉ CA trông như muốn cùng một thứ hai lần. Không phải vậy. IKEv2 xác thực cả hai phía, theo cả hai chiều, trong cùng một lần trao đổi, và điện thoại đóng vai trò khác nhau ở mỗi chiều: nó phải chứng minh mình là ai và phải quyết định tin cậy cổng nào. Chứng chỉ người dùng trả lời câu hỏi thứ nhất, một CA đáng tin cậy trả lời câu hỏi thứ hai, và không cái nào thay thế được cái kia.

Hai chiều xác thực trong một lần trao đổi

IKEv2 thiết lập một kênh điều khiển theo hai giai đoạn. Lần trao đổi đầu thương lượng thuật toán và khóa; lần thứ hai, IKE_AUTH, mang một tải AUTH từ mỗi phía cùng với danh tính của mỗi phía. Tải này là một chữ ký hoặc MAC tính trên lần trao đổi và được kiểm tra dựa trên thứ mà bên nhận đã tin cậy.

Cổng chứng minh danh tính bằng chứng chỉ của chính nó, và điện thoại kiểm tra chuỗi của chứng chỉ đó lên tới một gốc mà nó sẵn sàng tin cậy, sau đó kiểm tra rằng danh tính trong chứng chỉ khớp với cổng mà nó định kết nối tới. Điện thoại chứng minh danh tính bằng thông tin xác thực của chính nó, và cổng kiểm tra điều đó dựa trên CA đã phát hành chứng chỉ máy khách.

Đó là toàn bộ cơ chế đằng sau hai trường. Chứng chỉ người dùng là một lời tuyên bố của điện thoại về chính nó; trường CA là lời tuyên bố về người mà điện thoại sẽ tin. Một hồ sơ có cái này mà thiếu cái kia không thể hoàn tất xác thực lẫn nhau, và thử lại bao nhiêu lần cũng không thay đổi điều đó. Hai lỗi thậm chí trông khác nhau: thiếu khóa người dùng khiến điện thoại không tạo được chữ ký, còn thiếu mốc tin cậy khiến nó không chấp nhận chứng chỉ của cổng.

MaterialRoleWhat it cannot do
User certificate plus its private keyProves possession of the enrolled client identityEstablish that the gateway is the right one
Trusted CA certificateValidates the gateway chain under the intended identity checksProve the client's identity to the gateway
Expected gateway identityPins which server the phone acceptsGrant that user access to every private resource

Trình tạo hồ sơ Android yêu cầu những gì

Trình tạo hồ sơ IKEv2 của Google trình bày từng phương thức xác thực riêng biệt thay vì một chế độ chứng chỉ duy nhất. Phương thức chữ ký số nhận chứng chỉ người dùng, khóa riêng và CA gốc của máy chủ. Các phương thức khác nhận tên người dùng và mật khẩu, hoặc khóa chia sẻ trước.

Hãy đọc kỹ chữ ký đó, vì nó mã hóa cơ chế ở trên. Không có trường cho khóa riêng của người dùng trong phương thức tên người dùng và mật khẩu, và không có trường cho mốc tin cậy của cổng trong phương thức PSK, vì lý do đơn giản là các phương thức đó chứng minh những thứ khác nhau. Trộn chúng bằng cách dán mật khẩu vào trường chứng chỉ sẽ tạo ra hồ sơ thất bại tại IKE_AUTH với thông báo không nêu tên cái nào.

Loại khóa riêng được tài liệu hóa cho phương thức chữ ký số là RSA. Một menu gắn nhãn IPsec hay chứng chỉ không hàm ý hỗ trợ ECDSA, và hồ sơ được lắp trên giả định rằng có hỗ trợ sẽ thất bại tại API của nền tảng trước cả khi mạng được đụng tới.

Vì sao chỉ chứng chỉ người dùng công khai là không đủ

Tải AUTH là một chữ ký trên lần trao đổi, được tạo bằng khóa riêng của máy khách. Có chứng chỉ công khai cho phép cổng kiểm tra một chữ ký; nó không giúp gì cho điện thoại, vì điện thoại cần khóa để tạo chữ ký. Chỉ nhập .crt và bỏ lại khóa là dạng phổ biến nhất của lỗi này.

Hạ tầng khóa của Android phản ánh điều đó. Việc chọn danh tính máy khách đi qua KeyChain, nơi yêu cầu truy cập khóa riêng tương ứng chứ không chỉ một mục chứng chỉ. Một gói ghi danh hoặc quy trình quản lý thiết bị cài cả cặp cùng lúc là cách bình thường để có danh tính dùng được; sao chép thủ công một tệp chứng chỉ thường không phải.

Vậy hai mục trong hồ sơ không phải một gói chứng chỉ và bản sao của nó. Một là cặp khóa mà nền tảng phải ký được, còn lại là mốc tin cậy mà nền tảng so sánh. Hãy kiểm tra chúng như hai sự thật riêng: hồ sơ này có ký được không, và nó có biết tin cậy ai không?

Mốc tin cậy thuộc về một ứng dụng, không phải điện thoại

Cài chứng chỉ gốc vào kho người dùng không khiến mọi ứng dụng Android tin cậy nó: từ Android 7, ứng dụng phải chọn tham gia qua cấu hình bảo mật mạng của mình, và trước bản phát hành đó CA do người dùng cài được chấp nhận rộng hơn nhiều. Cấu hình tin cậy của ứng dụng có thể khác nhau, và một ứng dụng VPN tự quản lý vật liệu tin cậy có thể không bao giờ nhìn vào kho người dùng. Đó là lý do cùng một tệp CA có thể chạy trong ứng dụng này và trông như bị bỏ qua trong ứng dụng khác.

Từ đó có hai mô hình sở hữu. Hồ sơ VPN do hệ thống quản lý dùng quy trình cài chứng chỉ của thiết bị hoặc ghi danh của quản trị viên, rồi hồ sơ tham chiếu CA dự định. VPN do ứng dụng quản lý giữ vật liệu tin cậy của riêng mình và dùng trình nhập được tài liệu hóa của riêng nó, có thể hoàn toàn tách khỏi màn hình cài đặt Android. Đó cũng là nơi bạn sửa một chuỗi bị đứt: trong kho CA và lựa chọn hồ sơ với trường hợp hệ thống quản lý, trong màn hình nhập của chính ứng dụng với trường hợp ứng dụng quản lý.

Hãy quyết định bạn đang ở mô hình nào trước khi nhập bất cứ thứ gì, rồi xác nhận lựa chọn tin cậy của hồ sơ đang hoạt động sau đó. Nếu hướng dẫn của nhà vận hành và menu của ứng dụng không khớp, hành vi được tài liệu hóa của ứng dụng thắng cho lần cài đặt đó, nhưng CA vẫn phải đến từ nhà vận hành qua một kênh bạn có thể kiểm chứng. Tên tệp không phải bằng chứng về người phát hành.

Chọn chế độ trước, rồi chọn tệp

Chế độ chứng chỉ cần một cặp khóa máy khách, CA phát hành ở phía cổng, một mốc tin cậy cho chứng chỉ của cổng, và một kỳ vọng về danh tính mà chứng chỉ đó phải mang. Chế độ tên người dùng và mật khẩu thay cặp khóa máy khách bằng thông tin xác thực nhưng giữ nguyên yêu cầu tin cậy cổng. Chế độ PSK thay cả hai bằng một bí mật chia sẻ và thay đổi mô hình tin cậy thay vì làm nó đơn giản hơn.

Dù chọn gì, hãy để kiểm tra thông thường bật. Tùy chọn không kiểm tra, nơi ứng dụng cung cấp, loại bỏ chính việc kiểm tra mà trường CA tồn tại để làm; nó không sửa một mốc tin cậy bị thiếu. Điều tương tự áp dụng cho việc chấp nhận bất kỳ chứng chỉ máy chủ nào chỉ vì kết nối vẫn chạy khi không có nó.

Sau đó hãy kiểm chứng ở đúng chỗ: nhập vật liệu, kết nối một lần, và xác nhận trong phần chi tiết kết nối của ứng dụng rằng danh tính cổng đúng là cái bạn mong đợi và hồ sơ báo cáo phương thức xác thực mà bạn định dùng. Một kết nối thành công với phương thức sai được chọn là cấu hình bạn chưa hiểu, và nó sẽ thất bại lần sau khi nhà vận hành siết chặt chính sách.

Bài viết liên quan