สะพาน SOCKS ของ socat: รักษาชื่อโฮสต์ TLS ของเว็บไซต์
ใช้ตัวรับฟัง TCP แบบ loopback สำหรับปลายทาง SOCKS หนึ่งรายการ พร้อมรักษาตัวตน HTTP และ TLS ในแอปพลิเคชัน
แอปพลิเคชันไม่มีตัวเลือก SOCKS แต่เชื่อมต่อกับที่อยู่ TCP ที่เลือกได้ อะแดปเตอร์ที่มีเป้าหมายคงที่สามารถให้บทสนทนา SOCKS สำหรับปลายทางเดียวได้ ไม่จำเป็นต้องกลายเป็นพร็อกซีส่งต่อทั่วไปอีกตัว
สำหรับบิลด์ socat ที่ให้ SOCKS4A การจัดวางตัวอย่างคือ
socat TCP4-LISTEN:9443,bind=127.0.0.1,reuseaddr,fork \
SOCKS4A:127.0.0.1:service.example.net:443,socksport=1080
ปลายทาง SOCKS คือพอร์ตภายใน 1080 อะแดปเตอร์รับฟังที่พอร์ตภายใน 9443 และขอจากปลายทางนั้น service.example.net:443 ค่าเหล่านี้เป็นค่าตัวอย่าง ไม่ใช่การติดตั้งบริการที่สมบูรณ์
อะแดปเตอร์มีเป้าหมายคงที่หนึ่งเดียว
ทุกการเชื่อมต่อ TCP ที่รับเข้ามาจะขอใช้บริการเดียวกัน แอปพลิเคชันที่เชื่อมต่อกับ 9443 ส่งไบต์โปรโตคอลปกติของตน และ socat จัดการการเจรจา SOCKS4A การส่งคำขอ HTTP CONNECT ใหม่ไปยัง 9443 จะไม่เลือกปลายทางอื่น—แต่จะส่งไบต์เหล่านั้นต่อไปยังบริการคงที่
SOCKS4A ให้ชื่อโฮสต์แก่ปลายทาง SOCKS เพื่อการแปลงชื่อจากระยะไกล ซึ่งต่างจากรูปแบบ SOCKS4 ที่ใช้ที่อยู่ซึ่งไคลเอนต์เลือก อัปสตรีมที่เลือก—รวมถึงผู้สมัครสาธารณะจากรายการพร็อกซี SOCKS4—ต้องรองรับการจัดการชื่อโฮสต์ SOCKS4A และการยืนยันตัวตนที่จำเป็น ตัวอย่างนี้ไม่ใช่สูตรการเข้าสู่ระบบด้วยรหัสผ่าน SOCKS5
เชื่อมต่อภายใน ระบุบริการจริง
การเปลี่ยน URL แบบ HTTPS เป็น https://127.0.0.1:9443/ เปลี่ยนชื่อโฮสต์ที่ไคลเอนต์อาจใช้สำหรับ TLS และ HTTP ใบรับรองสำหรับ service.example.net จะไม่กลายเป็นใบรับรองที่ใช้ได้สำหรับ loopback
เมื่อไคลเอนต์รองรับการกำหนดเส้นทางการเชื่อมต่อแยกต่างหาก ให้คงตัวตนของ URL เดิมไว้ Curl แสดงความแตกต่างนั้นได้
curl --noproxy '*' \
--connect-to service.example.net:443:127.0.0.1:9443 \
https://service.example.net/
ซ็อกเก็ตไปยังอะแดปเตอร์ภายใน ขณะที่การตรวจสอบ TLS และปลายทาง HTTP ยังคงเป็น service.example.net แอปพลิเคชันอื่นต้องมีการควบคุมที่รองรับเทียบเท่าของตนเอง ไม่ใช่ทุกไคลเอนต์ที่มีให้
การผูกแบบ loopback จำกัดการเปิดเผยต่อเครือข่าย แต่กระบวนการภายในอื่นที่เข้าเกณฑ์ยังเข้าถึงได้ รักษาอายุบริการและผู้ใช้ให้เหมาะสม คงการตรวจสอบ TLS ไว้แทนที่จะระงับข้อผิดพลาดด้านตัวตนที่เกิดจาก URL แบบ loopback