Một hồ sơ OpenVPN chạy được ở nơi khác báo rằng không tìm thấy AES-256-GCM, hoặc các bên không chia sẻ mật mã nào, và phản xạ đầu tiên là sửa hồ sơ. Hai thông báo đó mô tả hai kiểu hỏng khác nhau. Một bên nói chương trình cục bộ không có thuật toán đó; bên kia nói cả hai đầu đều có thuật toán nhưng không có lựa chọn chung. Sửa hồ sơ không khắc phục được cái nào cho đến khi bạn biết mình đang gặp cái nào.

Đọc chính xác nội dung lỗi và chương trình đã tạo ra nó.

Xác định bạn đang gặp lỗi nào

Thông báo về mật mã không tìm thấy đến từ việc phân tích tùy chọn trên máy cục bộ, trước khi gửi bất kỳ gói tin nào. Nghĩa là tệp thực thi trước mặt bạn, hoặc thư viện mà nó liên kết, không cung cấp thuật toán đó. Thông báo về việc không có mật mã chung đến muộn hơn, trong lúc thương lượng, và nghĩa là hai bên đều hỗ trợ mật mã nhưng không thống nhất được một cái.

Sự khác biệt quan trọng vì một là vấn đề phiên bản phần mềm, còn kia là vấn đề cấu hình. Cái đầu được giải quyết bằng số phiên bản. Cái sau được giải quyết bằng cách so hai danh sách.

Thiếu năng lực cục bộ

Các bản dựng cộng đồng cũ có trước giá trị mặc định hiện đại, và ứng dụng máy tính để bàn có thể mang theo động cơ riêng khác với gói dòng lệnh cài bên cạnh. Hãy kiểm tra trên đúng tệp thực thi đã thực sự khởi tạo kết nối, rồi chọn bản dựng được hỗ trợ thay vì dạy một chương trình cũ thuật toán mới.

openvpn --version
openvpn --show-ciphers | grep -i gcm
openvpn --show-tls | head -5

Nếu AES-256-GCM không có trong danh sách đó thì không dòng hồ sơ nào thêm nó vào. Giải pháp là client mới hơn hoặc bản dựng khác, và các ràng buộc của phía cũ trở thành một câu hỏi thiết kế riêng.

Với client dựa trên OpenVPN 3, động cơ và các chỉ thị được chấp nhận khác với dòng cộng đồng 2.x, nên cùng một nội dung hồ sơ có thể thất bại vì lý do không liên quan gì đến danh sách mật mã.

Thiếu sót trong thương lượng

Khi cả hai bên liệt kê thuật toán, câu hỏi còn lại là bên nào đưa ra danh sách nào. OpenVPN cộng đồng đã đổi tên chỉ thị thương lượng: ncp-ciphers trong 2.4 trở thành data-ciphers trong 2.5, và trong 2.6 dòng cipher cũ chủ yếu phục vụ tương thích và dự phòng chứ không định nghĩa tập được thương lượng.

Vì thế chỉ sửa dòng cipher cũ có thể để nguyên danh sách thương lượng. Dòng cũ vẫn quan trọng cho dự phòng, và đó là việc riêng. Nhầm lẫn hai thứ tạo ra những chỉnh sửa không thay đổi gì nhìn thấy được.

openvpn --version | head -2
grep -n -E '^(data-ciphers|ncp-ciphers|cipher|tls-cipher)' server.conf client.ovpn

So sánh danh sách của hai đầu và thông báo từ chối của máy chủ. Nếu phần giao rỗng, hãy căn chỉnh danh sách một cách có chủ đích thay vì sao chép giá trị từ bài viết dành cho phiên bản khác. Một danh sách quá rộng âm thầm làm yếu mọi kết nối. Một danh sách quá hẹp loại trừ bên mà bạn muốn giữ.

Giữ tương thích rõ ràng

Dự phòng cho một bên cũ là quyết định có chi phí: toàn bộ triển khai chấp nhận một lựa chọn yếu hơn để một thiết bị có thể kết nối. Hãy ghi rõ như vậy và giới hạn ở bên cần đến nó.

Hai điều kiện quyết định kết quả. Nếu lỗi là cục bộ, thay bản dựng. Nếu lỗi là do thương lượng, căn chỉnh danh sách ở cả hai đầu và ghi lại những phiên bản bạn hỗ trợ.

Sau đó báo lỗi chính xác kèm đầu ra phiên bản và năng lực. Cặp đó tách thuật toán thiếu khỏi bất đồng và chặn vòng chỉnh sửa phỏng đoán tiếp theo trước khi nó bắt đầu.

Bài viết liên quan