Cầu SOCKS của socat: giữ nguyên tên máy chủ TLS của trang
Dùng trình lắng nghe TCP loopback cho một đích SOCKS trong khi giữ nguyên danh tính HTTP và TLS trong ứng dụng.
Ứng dụng không có tùy chọn SOCKS nhưng có thể kết nối tới một địa chỉ TCP đã chọn. Bộ chuyển đổi có đích cố định có thể cung cấp cuộc trò chuyện SOCKS cho một đích. Nó không cần trở thành một proxy chuyển tiếp thông dụng khác.
Với các bản dựng socat hỗ trợ SOCKS4A, một cách bố trí minh họa là:
socat TCP4-LISTEN:9443,bind=127.0.0.1,reuseaddr,fork \
SOCKS4A:127.0.0.1:service.example.net:443,socksport=1080
Điểm cuối SOCKS là cổng cục bộ 1080. Bộ chuyển đổi lắng nghe trên cổng cục bộ 9443 và yêu cầu điểm cuối đó service.example.net:443. Đây là các giá trị ví dụ, không phải triển khai dịch vụ hoàn chỉnh.
Bộ chuyển đổi chỉ có một đích cố định
Mỗi kết nối TCP được chấp nhận đều yêu cầu cùng một dịch vụ. Ứng dụng kết nối tới 9443 cung cấp các byte giao thức thông thường; socat cung cấp quá trình thương lượng SOCKS4A. Gửi một yêu cầu HTTP CONNECT mới tới 9443 sẽ không chọn đích khác—nó sẽ chuyển các byte đó tới dịch vụ cố định.
SOCKS4A cung cấp tên máy chủ cho điểm cuối SOCKS để phân giải từ xa. Điều này khác với dạng SOCKS4 vốn dùng địa chỉ do máy khách chọn. Thượng nguồn được chọn—kể cả một ứng viên công khai từ danh sách proxy SOCKS4—phải hỗ trợ xử lý tên máy chủ SOCKS4A và xác thực cần thiết; ví dụ này không phải công thức đăng nhập bằng mật khẩu SOCKS5.
Kết nối cục bộ, nhận diện dịch vụ thật
Đổi URL HTTPS thành https://127.0.0.1:9443/ sẽ thay đổi tên máy chủ mà máy khách có thể dùng cho TLS và HTTP. Chứng chỉ cho service.example.net sẽ không trở thành chứng chỉ hợp lệ cho loopback.
Khi máy khách hỗ trợ định tuyến kết nối riêng, hãy giữ danh tính của URL gốc. Curl có thể minh họa sự khác biệt đó:
curl --noproxy '*' \
--connect-to service.example.net:443:127.0.0.1:9443 \
https://service.example.net/
Socket đi tới bộ chuyển đổi cục bộ trong khi việc xác minh TLS và đích HTTP vẫn là service.example.net. Các ứng dụng khác cần cơ chế điều khiển tương đương được hỗ trợ của riêng chúng; không phải máy khách nào cũng cung cấp.
Việc gắn loopback hạn chế phơi nhiễm mạng, nhưng các tiến trình cục bộ đủ điều kiện khác vẫn có thể tiếp cận. Giữ thời gian sống của dịch vụ và người dùng phù hợp. Giữ xác minh TLS thay vì kìm hãm lỗi danh tính do URL loopback gây ra.