Các hồ sơ VPN hoạt động tuần trước hỏng sau khi nâng cấp bản phát hành Ubuntu, và nhật ký hiếm khi nhắc đến việc nâng cấp. Điều nó nêu tên là lớp đã thất bại: bắt tay TLS, mật mã được thương lượng cho kênh dữ liệu, gói đã cài đặt, hoặc bản sao OpenSSL mà tệp nhị phân nạp khi khởi động. Mỗi lớp có dạng lỗi và cách sửa riêng, nên phân loại là việc đầu tiên và chỉnh sửa là việc thứ hai. Hãy coi hồ sơ là vô tội cho đến khi nhật ký nêu tên nó.

Lớp nào đã thất bại: bắt tay, mật mã, gói hay thư viện

Đọc nhật ký máy khách trước khi chạm vào hồ sơ. lỗi sớm nhất trong đầu ra là lỗi xác định lớp; mọi thứ in sau đó thường là hệ quả của thất bại đầu tiên ấy. Khi máy khách hoàn toàn không khởi động, nhật ký VPN là tệp sai để mở.

Các phàn nàn về chứng chỉ và chữ ký, hay thông báo về độ dài khóa, đến từ kênh điều khiển và chính sách thư viện điều hành nó. Ngược lại, cảnh báo bắt đầu bằng DEPRECATED OPTION thuộc về thương lượng kênh dữ liệu.

Một dòng như Unrecognized option là loại thứ ba: tệp nhị phân mới không còn chấp nhận một chỉ thị mà bản cũ đã chịu đựng, nên phải viết lại hồ sơ thay vì nới lỏng thư viện. Lỗi gói lại trông khác, vì chúng xảy ra trước khi bất kỳ mã đường hầm nào chạy. Thiếu tệp nhị phân, plugin không nạp được, hoặc kho chỉ tới tên mã sai đều tạo ra dạng đó. Bốn triệu chứng, bốn nơi để xem và gần như không có chồng chéo giữa các cách sửa.

Khi bắt tay thất bại, chính sách TLS từ chối chứng chỉ

Ubuntu 22.04 chuyển hệ thống sang OpenSSL 3, và mức bảo mật mặc định trong nhánh đó khắt khe hơn về chữ ký chứng chỉ và kích thước khóa so với 20.04. Chứng chỉ CA được ký bằng digest cũ hơn, hoặc khóa dưới ngưỡng hiện tại, nay thất bại trong lúc bắt tay. Vì chưa có gì được xác thực, lỗi đọc như mật khẩu sai hoặc máy chủ chết.

Cách sửa hẹp gắn một chuỗi mật mã chỉ vào kết nối này. Trong trình soạn thảo máy tính để bàn, mở hồ sơ, vào cài đặt nâng cao và đặt DEFAULT:@SECLEVEL=0 vào trường mật mã TLS. Tệp khóa NetworkManager nhận cùng giá trị dưới [vpn]:

[vpn]
tls-cipher=DEFAULT:@SECLEVEL=0

Khởi động lại NetworkManager và kết nối lại, vì daemon lưu đệm các hồ sơ đã phân tích và nếu không sẽ tiếp tục dùng bản sao nó đang giữ. Biết dòng đó làm gì trước khi giữ lại: cài đặt ấy là một ngưỡng trên nhiều tham số chứng chỉ và khóa, không phải tên mật mã, nên hạ nó sẽ mở rộng những gì hồ sơ đơn lẻ chấp nhận. Ghi lại máy chủ nào yêu cầu và bỏ cài đặt khi nhà vận hành phát hành lại tài liệu hiện hành. Thay đổi /etc/ssl/openssl.cnf đạt cùng ngưỡng cho mọi chương trình đọc tệp đó, vượt xa VPN.

OpenVPN 2.6 yêu cầu mật mã được liệt kê để thương lượng

Ubuntu 22.10 mang OpenVPN 2.6, và trong bản đó --cipher ngừng tự chọn kênh dữ liệu. Mật mã cũng phải có trong danh sách data-ciphers đã thương lượng, nếu không máy khách in cảnh báo lỗi thời và sau đó không dựng được đường hầm.

Plugin NetworkManager cùng thời vẫn chỉ ghi chỉ thị cũ. Chi tiết này chia đôi chẩn đoán, vì hồ sơ được sửa tay có thể kết nối từ shell mà vẫn thất bại từ applet máy tính để bàn. Thêm danh sách vào tệp kết nối dưới [vpn]:

data-ciphers=AES-256-CBC

Dùng giá trị máy chủ công bố, không phải giá trị bạn nhớ; máy chủ cung cấp AES-256-GCM sẽ không thương lượng với danh sách máy khách chỉ nêu CBC. Khởi động lại trình quản lý và kết nối lại, rồi lặp lại thử nghiệm từ shell với mật mã được truyền rõ ràng cho cả thương lượng lẫn dự phòng:

sudo openvpn --config client.ovpn --data-ciphers AES-256-CBC --data-ciphers-fallback AES-256-CBC

Nếu lệnh đó dựng được đường hầm, máy chủ, chứng chỉ và thông tin đăng nhập đều tốt, và khiếm khuyết duy nhất còn lại là tùy chọn đã lưu của trình quản lý. Cảnh báo về chỉ thị keysize thuộc cùng việc dọn dẹp: chú thích nó và giữ tệp gốc bên cạnh hồ sơ.

Lỗi gói và plugin trông giống lỗi VPN

Không phải mọi thất bại sau nâng cấp đều mang tính mật mã. Một kho OpenVPN được thêm dưới tên mã mà bản phát hành không dùng tạo ra gói không bao giờ cài được, nên hãy so sánh những gì lsb_release -a báo cáo với tệp danh sách bạn đã thêm. Thành phần universe thiếu hoặc túi bảo mật tạo ra gói hoàn toàn không tìm thấy. Cả hai trường hợp để hồ sơ nguyên vẹn và đường hầm bất khả thi.

Đọc lỗi của trình quản lý gói trước nhật ký VPN. Nếu máy khách chưa từng được cài, mọi mức chỉnh sửa hồ sơ đều không tạo ra bắt tay.

Các hồ sơ hai yếu tố ngừng hỏi là phiên bản plugin của cùng câu chuyện. Thử thách đến từ một plugin xác thực, và bản nâng cấp đã bỏ hoặc thay nó để hồ sơ nguyên vẹn trong khi lời nhắc biến mất. Cài lại plugin được hỗ trợ thay vì xóa yếu tố thứ hai để kết nối hoạt động.

Thư viện của nhà cung cấp có thể ẩn sau lỗi chính sách

Một mẫu đáng được nhận ra vì nó đánh bại mọi cách sửa chính sách. Công cụ cấu hình của nhà cung cấp phần cứng có thể cài thư viện OpenSSL riêng và đặt chúng trước các bản sao hệ thống trong đường dẫn tìm kiếm của bộ nạp. Máy khách khi đó khởi động với thư viện không ai nâng cấp, và lỗi khởi động trông đúng như chứng chỉ bị từ chối.

Cài lại gói VPN không thay đổi thư viện nào được tìm thấy trước, và hạ mức TLS không chạm tới thư viện chưa từng đến từ hệ thống. Hỏi bộ nạp xem tệp nhị phân thực sự phân giải những đối tượng mật mã nào:

ldd /usr/sbin/openvpn | grep -i -E 'ssl|crypto'

Xóa hoặc trỏ lại bản sao của nhà cung cấp, rồi chạy lại cùng kiểm tra đó. Phiên bản mong đợi phải là phiên bản đang dùng trước khi quay lại hồ sơ.

Ghim máy khách cũ mua thời gian, không phải giải pháp

Giữ phiên bản máy khách trước đó khôi phục đường hầm chừng nào việc giữ còn kéo dài. Nó cũng đóng băng các bản cập nhật bảo mật cho gói đó và lên lịch cùng kiểu hỏng cho lần nâng cấp sau, nên hãy coi đó là biện pháp tạm có ngày tháng, không phải giải pháp.

Nếu vẫn ghim, hãy giữ gói một cách rõ ràng để bản nâng cấp không giám sát không thể hủy ghim, ghi lại lý do và ngày xem lại, và đặt nhắc nhở cho bản phát hành hồ sơ tiếp theo của nhà cung cấp. Điều kiện đáng theo dõi là hồ sơ máy chủ thương lượng mật mã hiện hành; khi nó tồn tại, ghim không còn lý do. Ngược lại, một ghim không được ghi lại trở thành sự cố không ai giải thích được sau nửa năm, vì người áp dụng đã đi và tệp không ghi gì.

Lần tới khi VPN chết sau một lần nâng cấp bản phát hành, hãy hỏi năm câu theo thứ tự: lớp nào tạo ra lỗi đầu tiên, chính sách TLS có từ chối chứng chỉ không, mật mã có thương lượng được cả hai chiều không, gói và plugin của nó có thực sự được cài không, và tiến trình nạp thư viện nào. Chỉ khi cả năm trả về sạch thì hạ cấp mới có nghĩa.

Bài viết liên quan