Ένα τελικό σημείο Twisted εκτελεί τη σύνδεση TCP. Ένα εργοστάσιο WebSocket ρυθμισμένο να διαπραγματεύεται proxy χρειάζεται ακόμη αυτό το τελικό σημείο για να συνδεθεί στον μεσολαβητή.

Για μια υπάρχουσα εφαρμογή 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 της εφαρμογής. Κρατήστε τον reactor και τον καθαρισμό της σύνδεσης στον κύκλο ζωής αυτής της εφαρμογής. Για μια δημόσια υπηρεσία WSS που επιτρέπεται μέσω δημόσιου μεσολαβητή, η λίστα proxy HTTP παρέχει υποψηφίους για τον κεντρικό υπολογιστή και τη θύρα proxy του εργοστασίου.

Για ένα εργοστάσιο ρυθμισμένο με proxy, το connectWS συνδέει TCP στον proxy και διατηρεί το πλαίσιο TLS του προορισμού για τη μεταγενέστερη ασφαλή σύνδεση. Δεν τυλίγει αρχικά τη συνηθισμένη σύνδεση proxy HTTP στο TLS του προορισμού.

Μια προσαρμοσμένη διάταξη HostnameEndpoint και ClientService πρέπει να διατηρεί την ίδια διαίρεση: πρώτα σύνδεση στον proxy, έπειτα το ρυθμισμένο εργοστάσιο διαπραγματεύεται τον στόχο και εγκαθιστά το απαιτούμενο TLS. Η άμεση σύνδεση του τελικού σημείου στο events.example ενώ το εργοστάσιό του περιμένει συνομιλία proxy αναμειγνύει αυτούς τους ρόλους.

Η διεύθυνση WebSocket παραμένει ο πραγματικός προορισμός της υπηρεσίας. Το όνομα κεντρικού υπολογιστή της παρέχει επίσης την ταυτότητα TLS· η αντικατάστασή του με το όνομα του proxy δεν ρυθμίζει την επιδιωκόμενη ασφαλή υπηρεσία.

Σχετικά άρθρα