ConnMan chạy được một buổi chiều rồi từ chối, và dòng nhật ký nhắc đến việc xác minh chứng chỉ. Dòng đó đẩy người ta đến các gói CA chưa bao giờ hỏng. Hai lỗi khác nhau tạo ra gần như cùng một dạng thất bại: cookie phiên hết hạn, hoặc chứng chỉ máy chủ thực sự đã thay đổi. Có thể phân biệt trong khoảng một phút, và chỉ một trong hai liên quan đến dấu vân tay.

Hai lỗi, một dòng nhật ký gây nhầm lẫn

Chúng tách nhau ở hai quan sát, và không quan sát nào cần đọc lại lần hai. Thứ nhất là thời điểm lỗi bắt đầu: cookie hết hạn đến sau nhiều giờ hoặc nhiều ngày hoạt động, còn chứng chỉ bị thay thế đến ngay sau khi đổi cổng kết nối.

SignalExpired cookieChanged certificate
When it startedafter hours or days of workingright after a gateway change
Fingerprint from a fresh authenticateunchangeddifferent value
Usual log tailHTTP CONNECT 401 / unauthorizedsigner not found / verify failed
Repairreplace the cookie, restartre-pin deliberately, then restart

Bài kiểm tra một phút là lần chạy authenticate bên dưới. So sánh FINGERPRINT của nó với OpenConnect.ServerCert trong tệp. Dấu vân tay giống nhau nhưng COOKIE khác nghĩa là chỉ thay cookie. Dấu vân tay khác nghĩa là chứng chỉ máy chủ thực sự đã thay đổi, nên hãy ghim lại một cách có chủ đích và ghi lại ai đã phê duyệt.

Tạo tài liệu thay vì gõ tay

ConnMan không có bước nhập cho hồ sơ OpenConnect, khác với NetworkManager. Nó đọc một tệp cung cấp mà các giá trị phải được tạo trước, và cách được hỗ trợ để tạo chúng là chế độ authenticate của OpenConnect.

sudo openconnect --csd-wrapper=/home/user/.cisco/csd-wrapper.sh \
  --authenticate --user myuser vpn.example.com

Đầu ra in bốn giá trị: POST, COOKIE, HOST và FINGERPRINT. Dấu vân tay, với tiền tố sha256:, là ghim của máy chủ. Cookie là hiện vật phiên có thời hạn do cổng kết nối quyết định. Hãy coi chúng là hai loại bí mật khác nhau: chúng hết hạn theo lịch khác nhau, và chỉ một trong hai được cho là sẽ thay đổi.

Tệp mang cả hai, và chúng già đi khác nhau

Tệp cung cấp nằm dưới /var/lib/connman-vpn/ và được daemon VPN đọc cho từng kết nối, không phải ứng dụng khay hệ thống. Giữ tên kết nối trong phần toàn cục và chi tiết giao thức trong phần nhà cung cấp.

[global]
Name = Company VPN

[provider_openconnect]
Type = OpenConnect
Name = Company Cisco VPN
Host = vpn.example.com
Domain = corp.example
OpenConnect.ServerCert = sha256:...
OpenConnect.Cookie = ...

Dùng tên máy chủ mà cổng thực sự phục vụ. Một địa chỉ IP trần có thể vượt qua kiểm tra chứng chỉ mà vẫn thất bại, vì thiết bị định tuyến theo máy chủ ảo và chờ tên.

systemctl status connman-vpn --no-pager   # is the daemon even installed and running
sudo systemctl restart connman-vpn       # after the file edit
journalctl -u connman-vpn --since '1 hour ago'  # after the connection attempt

Nhật ký thực sự cho thấy gì

Chú thích trên khay sẽ không nói bạn gặp lỗi nào. Nhật ký sẽ nói, nếu bạn đọc trình tự thay vì dòng đáng báo động đầu tiên. Cookie cũ thường cho thấy quá trình thương lượng TLS hoàn tất và tầng HTTP từ chối sau đó, vì vậy những từ về chứng chỉ nằm cạnh một thất bại phân quyền.

So sánh một lần chạy authenticate mới với các giá trị trong tệp. Nếu dấu vân tay khớp và chỉ cookie khác, bạn đã có câu trả lời mà không cần chạm vào cài đặt tin cậy.

Làm mới trường đã hết hạn

Lặp lại lệnh authenticate, thay OpenConnect.Cookie và khởi động lại daemon. Để yên dấu vân tay trừ khi đầu ra mới cho thấy giá trị khác; khi đó chứng chỉ máy chủ thực sự đã bị thay và ghim lại là quyết định mà ai đó nên ghi lại, không phải dán từ thông báo lỗi.

Tự động hóa việc làm mới là hợp lý: một script nhỏ đọc mật khẩu từ đầu vào chuẩn, chạy chế độ authenticate và chỉ ghi lại dòng cookie. Giữ thông tin đăng nhập ngoài script và chỉ tài khoản chạy nó đọc được, đồng thời làm cho việc ghi lại mang tính nguyên tử để lần chạy hỏng không để lại tệp viết dở.

Nếu cần làm mới vài giờ một lần, hãy ghi lại khoảng thời gian đó. Đó là thuộc tính của chính sách phiên của cổng kết nối, và nó quyết định nên tự động hóa việc làm mới hay yêu cầu phiên dài hơn.

Bài viết liên quan