Ba sự thật khác nhau bị gộp thành một dòng trong hầu hết các cuộc thảo luận OpenVPN về TLS: bản dựng máy khách của bạn làm được gì, hồ sơ cho phép điều gì và phiên đã thương lượng thực sự điều gì. Một danh sách bộ TLS 1.3 ngắn chỉ trả lời được một nửa câu hỏi ở giữa, và không nói gì về giới hạn dưới của phiên bản giao thức. Hãy đi qua các kiểm tra bên dưới theo thứ tự và dừng ở kiểm tra đầu tiên không đứng vững, vì mỗi kiểm tra sau đều giả định các kiểm tra trước đã được giải quyết.

Kiểm tra bản dựng trước khi đọc bất kỳ danh sách nào

Một chỉ thị cấu hình không thể thêm hỗ trợ giao thức vào tệp nhị phân vốn không có nó. Hãy bắt đầu với biểu ngữ phiên bản, nêu tên thư viện mật mã đã biên dịch:

openvpn --version

Bản dựng 2.6 liên kết với OpenSSL chấp nhận cả tls-cipher và tls-ciphersuites. Bản dựng với mbed TLS hoàn toàn không có lựa chọn bộ TLS 1.3, và hướng dẫn 2.6 đánh dấu tls-ciphersuites là tùy chọn OpenSSL. Nếu máy chủ được dựng lại với phần phụ trợ khác, cùng một hồ sơ có thể thay đổi hành vi mà không cần thay đổi một dòng cấu hình nào.

Trong khi ở đây, hãy chạy openvpn --show-tls và giữ lại đầu ra. Đó là bản kiểm kê bạn sẽ so sánh sau này, và việc ghi lại nó trước khi ai đó bắt đầu sửa hồ sơ là rẻ.

Viết biểu ngữ và danh sách vào phiếu thay đổi, không phải cửa sổ trò chuyện. Khi hai người tranh cãi liệu một máy khách có thể cung cấp một bộ trong sáu tuần nữa hay không, đầu ra đã ghi lại sẽ giải quyết điều đó trong một dòng.

Giữ ranh giới phiên bản tách khỏi danh sách mật mã

Trong hướng dẫn 2.6 đây là ba điều khiển, không phải một:

  • tls-cipher đặt chính sách mật mã cho TLS 1.2 và cũ hơn, và được chuyển cho danh sách mật mã của OpenSSL;
  • tls-ciphersuites chọn các bộ TLS 1.3;
  • tls-version-min và tls-version-max giới hạn các phiên bản giao thức mà kết nối được dùng.

Vì vậy, một danh sách bộ TLS 1.3 được cắt gọt cẩn thận không chứng minh điều gì về việc một phiên bản cũ hơn vẫn được phép. Nếu yêu cầu là «chỉ TLS 1.3», giới hạn dưới phiên bản là thứ mang nó, và danh sách bộ chỉ thu hẹp các lựa chọn trong giới hạn đó:

tls-version-min 1.3
tls-ciphersuites TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256

Cặp đó làm hai việc. Xóa một trong hai dòng khiến dòng kia thực thi ít hơn bạn nghĩ, và chính thất bại đó là lý do toàn bộ kiểm tra này tồn tại.

Kênh dữ liệu là điều khiển thứ tư. data-ciphers thương lượng mật mã đối xứng bên trong đường hầm, và kết quả của nó không nói gì về phiên bản TLS của kênh điều khiển. Thấy AES-256-GCM trong bản tóm tắt phiên không phải bằng chứng về TLS 1.3 theo bất kỳ hướng nào.

Đọc show-tls như một bản kiểm kê cục bộ

--show-tls liệt kê các bộ mà thư viện mật mã mà tệp nhị phân này liên kết hỗ trợ, theo thứ tự ưu tiên. Đây không phải báo cáo từ cổng. Hướng dẫn nói rõ rằng danh sách đến từ thư viện cục bộ, nghĩa là một máy tính xách tay có OpenSSL 3.x và một bộ định tuyến có bản dựng cũ hơn sẽ in ra các danh sách khác nhau khi nói chuyện với cùng một máy chủ.

EvidenceWhat it actually describes
--show-tls outputCapabilities of this client build and its library
Profile directivesWhat this attempt is allowed to offer
Session log lineWhat this one negotiation selected

Giả sử máy khách hỗ trợ các bộ A, B và C và một phiên chọn B. Điều đó không xác lập gì về việc máy chủ có cho phép A hay C hay không, cũng không xác lập B có phải là lựa chọn duy nhất được phép hay không. Hãy giữ ba dòng riêng biệt, và hầu hết các chủ đề TLS rối rắm sẽ tự giải quyết.

Bản kiểm kê vẫn đáng giữ. Khi một phiên thất bại, việc so sánh danh sách thư viện với danh sách hồ sơ cho bạn biết máy khách có cơ hội cung cấp thứ máy chủ muốn hay không. Nó cũng cho thấy liệu một thay đổi phần phụ trợ có âm thầm loại bỏ TLS_CHACHA20_POLY1305_SHA256 khỏi nhóm mà các máy khách cũ dựa vào hay không — kiểu hồi quy xuất hiện dưới dạng một số người dùng không thể kết nối trong khi mọi người khác không nhận ra gì.

Hỏi cổng một điều nó có thể trả lời

Nếu bạn quản trị dịch vụ, hãy kiểm tra cấu hình hiệu lực của phiên bản đang chạy thay vì một tệp trên đĩa. OpenVPN có thể đã được khởi động với một đường dẫn --config khác, có thể kéo các tệp bao gồm và có thể chưa được khởi động lại kể từ lần sửa. Chính sách của daemon đang chạy là thứ máy khách gặp phải.

Nếu bạn không quản trị nó, hãy yêu cầu nhà vận hành các yêu cầu máy khách được hỗ trợ hoặc một bài kiểm tra chấp nhận có phạm vi. Một nỗ lực bị từ chối không tự động là một bộ bị từ chối: giới hạn dưới phiên bản, kiểm tra danh tính chứng chỉ như remote-cert-tls, hoặc sự không khớp giữa tls-auth và tls-crypt có thể kết thúc trao đổi trước khi việc chọn bộ trở nên quan trọng. Hãy đọc lỗi của máy chủ trước khi thay đổi danh sách của máy khách, vì «handshake failed» bao trùm bốn nguyên nhân khác nhau và chỉ một trong số đó là không khớp mật mã.

Trỏ openssl s_client vào cổng VPN cũng không tái tạo câu hỏi. Kênh điều khiển chạy bên trong khung riêng của OpenVPN, vì vậy một đầu dò TLS thô kiểm tra một giao thức khác trên cổng vốn mong đợi thứ khác. Mọi kết luận rút ra từ đó là về đầu dò, không phải về đường hầm.

Ghi lại hai kết quả và giữ chúng tách biệt

Một phiên được phép mới tạo ra một dòng kênh điều khiển nêu phiên bản giao thức và mật mã được chọn, cùng một dòng kênh dữ liệu riêng nêu mật mã của đường hầm. Ghi lại cả hai cùng với phiên bản máy khách và tên hồ sơ, và ghi chú phiên bản máy chủ nào đã trả lời:

openvpn --config office.ovpn --verb 4 2>&1 | tee session.txt

Sau đó đọc hai dòng từ chính tệp đó thay vì từ trí nhớ. Cặp đó là bằng chứng; chỉ tên bộ là một sở thích, và ranh giới phiên bản là một tuyên bố riêng về điều máy chủ từ chối.

Thực hiện các kiểm tra theo thứ tự này. Xác nhận bản dựng và phần phụ trợ bằng --version. Ghi lại --show-tls trước khi thay đổi bất cứ điều gì. Nêu giới hạn dưới phiên bản cần thiết tách khỏi danh sách bộ. Xác nhận chính sách hiệu lực của phiên bản đang chạy với chủ sở hữu của nó. Quan sát một phiên được phép và, nếu kế hoạch cho phép, một nỗ lực bị từ chối với phiên bản cũ hơn. Ghi lại kết quả của kênh điều khiển và kênh dữ liệu như những phát hiện riêng.

Nếu một máy khách bắt buộc không thể đáp ứng mức tối thiểu mới, hãy đưa ra quyết định di chuyển hoặc ngoại lệ đó một cách rõ ràng thay vì âm thầm hạ thấp một quy tắc chấp nhận không liên quan để việc triển khai trông như đã xong.

Bài viết liên quan