socat SOCKS-bruggen: de TLS-hostnaam van de site behouden
Gebruik een loopback-TCP-listener voor één SOCKS-bestemming en behoud de HTTP- en TLS-identiteit in de applicatie.
Een applicatie heeft geen SOCKS-optie, maar kan verbinding maken met een gekozen TCP-adres. Een adapter met een vast doel kan het SOCKS-gesprek voor één bestemming leveren. Hij hoeft geen nieuwe algemene doorstuurproxy te worden.
Voor socat-builds met SOCKS4A is een illustratieve opstelling:
socat TCP4-LISTEN:9443,bind=127.0.0.1,reuseaddr,fork \
SOCKS4A:127.0.0.1:service.example.net:443,socksport=1080
Het SOCKS-eindpunt is lokale poort 1080. De adapter luistert op lokale poort 9443 en vraagt dat eindpunt om service.example.net:443. Dit zijn voorbeeldwaarden, geen volledige service-uitrol.
De adapter heeft één vast doel
Elke geaccepteerde TCP-verbinding vraagt dezelfde service. Een applicatie die met 9443 verbindt, levert zijn normale protocolbytes; socat levert de SOCKS4A-onderhandeling. Een nieuw HTTP CONNECT-verzoek naar 9443 zou geen andere bestemming kiezen—het zou die bytes doorsturen naar de vaste service.
SOCKS4A levert een hostnaam aan het SOCKS-eindpunt voor externe resolutie. Dat verschilt van de SOCKS4-vorm met een door de client gekozen adres. De gekozen upstream—inclusief een openbare kandidaat uit de SOCKS4-proxylijst—moet SOCKS4A-hostnaamafhandeling en de vereiste authenticatie ondersteunen; dit voorbeeld is geen SOCKS5-wachtwoordaanmeldingsrecept.
Verbind lokaal, herken de echte service
Een HTTPS-URL wijzigen in https://127.0.0.1:9443/ wijzigt de hostnaam die de client voor TLS en HTTP mag gebruiken. Een certificaat voor service.example.net wordt geen geldig certificaat voor loopback.
Waar de client aparte verbindingsroutering ondersteunt, behoud de identiteit van de oorspronkelijke URL. Curl kan dat verschil illustreren:
curl --noproxy '*' \
--connect-to service.example.net:443:127.0.0.1:9443 \
https://service.example.net/
De socket gaat naar de lokale adapter terwijl TLS-verificatie en de HTTP-bestemming service.example.net blijven. Andere applicaties hebben hun eigen gelijkwaardige ondersteunde besturing nodig; niet elke client biedt die.
De loopback-binding beperkt netwerkblootstelling, maar andere geschikte lokale processen kunnen er nog steeds bij. Houd de levensduur van de service en de gebruikers passend. Behoud TLS-verificatie in plaats van de identiteitsfout door een loopback-URL te onderdrukken.