ปลายทาง Twisted ทำการเชื่อมต่อ TCP โรงงาน WebSocket ที่กำหนดค่าให้เจรจาพร็อกซียังต้องใช้ปลายทางนั้นเพื่อเชื่อมต่อกับตัวกลาง

สำหรับแอปพลิเคชัน Autobahn ที่มีอยู่ซึ่งใช้ตัวช่วยมาตรฐาน:

from autobahn.twisted.websocket import WebSocketClientFactory, connectWS
from twisted.internet import ssl

factory = WebSocketClientFactory(
    'wss://events.example/channel',
    proxy={'host': 'proxy.example', 'port': 8080},
)
factory.protocol = ApplicationProtocol
connector = connectWS(
    factory,
    contextFactory=ssl.optionsForClientTLS('events.example'),
    timeout=10,
)

ApplicationProtocol คือคลาสโปรโตคอล WebSocket ที่มีอยู่ของแอปพลิเคชัน รักษารีแอกเตอร์และการล้างการเชื่อมต่อไว้ในวงจรชีวิตของแอปพลิเคชันนั้น สำหรับบริการ WSS สาธารณะที่ได้รับอนุญาตผ่านตัวกลางสาธารณะ รายการพร็อกซี HTTP จัดหาผู้สมัครสำหรับโฮสต์และพอร์ตพร็อกซีของโรงงาน

สำหรับโรงงานที่กำหนดค่าด้วยพร็อกซี connectWS เชื่อม TCP กับพร็อกซีและเก็บบริบท TLS ของปลายทางไว้สำหรับการเชื่อมต่อที่ปลอดภัยในภายหลัง ในตอนแรกจะไม่ห่อการเชื่อมต่อพร็อกซี HTTP ปกติด้วย TLS ของปลายทาง

การจัดวาง HostnameEndpoint และ ClientService แบบกำหนดเองต้องรักษาการแบ่งบทบาทเดียวกันไว้: เชื่อมต่อกับพร็อกซีก่อน จากนั้นให้โรงงานที่กำหนดค่าไว้ เจรจาเป้าหมาย และสร้าง TLS ที่จำเป็น การเชื่อมต่อปลายทางโดยตรงกับ events.example ขณะที่โรงงานคาดการณ์การสนทนาผ่านพร็อกซีจะทำให้บทบาทเหล่านั้นปนกัน

URL ของ WebSocket ยังคงเป็นปลายทางบริการจริง ชื่อโฮสต์ของมันยังให้ข้อมูลระบุตัวตน TLS ด้วย การแทนที่ด้วยชื่อโฮสต์ของพร็อกซีไม่ได้กำหนดค่าบริการที่ปลอดภัยตามที่ตั้งใจ

บทความที่เกี่ยวข้อง