CPython 3.14 imaplib duerch SOCKS mat verifizéiertem TLS
Passt eng CPython 3.14 IMAP SSL-Verbindung duerch SOCKS un, ouni Sockets global ze ersetzen oder d'TLS-Identitéit vum Mailserver ze verléieren.
Eng IMAP SSL-Verbindung kann duerch SOCKS goen an de Mailserver trotzdem als hiren TLS-Peer behalen. Den nëtzlechen Integratiounspunkt ass do, wou de Client säin Transport erstallt, ier déi gewéinlech IMAP-Begréissung an d'Capability-Behandlung ufänken.
Fir CPython 3.14 weist dat Folgend eng kleng Adaptermat PySocks. Si iwwerschreift e private Transport-Hook, also halt si un d'imaplib-Versioun gebonnen, déi ënnerhal gëtt:
import imaplib
import ssl
import socks
class SocksIMAP4SSL(imaplib.IMAP4_SSL):
def _create_socket(self, timeout):
stream = socks.create_connection(
(self.host, self.port),
timeout=timeout,
proxy_type=socks.SOCKS5,
proxy_addr="proxy.example",
proxy_port=1080,
proxy_rdns=True,
)
try:
return self.ssl_context.wrap_socket(
stream, server_hostname=self.host)
except Exception:
stream.close()
raise
context = ssl.create_default_context()
with SocksIMAP4SSL("imap.example", ssl_context=context,
timeout=15) as mailbox:
mailbox.noop()D'Nimm an de Port sinn Platzhalter fir e schonn disponibele Proxy an en IMAP-Service. Fir en ëffentlecht IMAP-Zil, deem ëffentlech Proxye erlaabt sinn, bitt d'SOCKS5-Proxy-Lëscht Kandidaten; jidderee muss de benötigten Mailhost an de Port erlaben. D'PySocks-Ofhängegkeet liwwert d'SOCKS-Verhandlung; imaplib initialiséiert nach ëmmer d'Mail-Sessioun. Et ass keen globale Remplaçement vun socket.socket bedeelegt.
Behaalt d'Identitéit vum Mailserver
Den TLS-Hostnumm bleift imap.example. Et ass net den SOCKS-Hostnumm. Beim Duerchginn vun ssl.create_default_context() ginn déi normal Zertifikats- an Hostnummskontrollen bewosst aktivéiert; en eenzeg verschlësselte Socket ass net genuch, fir déi Kontrollen opzestellen.
proxy_rdns=True freet de SOCKS-Wee, den Zilhostnumm ze verschaffen. Wann de Proxy e Kont erfuerdert, gehéieren seng ënnerstëtzt Umeldungsargumenter zu där Transportkonfiguratioun. Si loggen sech net an d'Mailbox an.
Loosst d'Sessiounsinitialiséierung beim imaplib
Den Adapter gëtt den TLS-Stroum un den normale Konstruktor zréck. D'Neiimplémentéiere vun open() aus engem ale Beispill kann Timeout-Parameter, Pufferung an aner Initialiséierungsviraussetzunge verpassen. An CPython 3.14 ass souguer den ale file-Zougrëff eng Kompatibilitéitseigenschaft an net e Feld, dat fräi ka rekonstruéiert ginn.
Beim Upgrade vun der Bibliothéik iwwerpréift dësen private Hook géint déi entspriechend Quell. Wann d'Entretien vun enger Ënnerklass net passend ass, wielt e Mailclient mat enger dokumentéierter Proxy-Transport-Schnittstell. All Arrangement soll déi selwecht Trennung behalen: Proxyverbindung, TLS-Verifikatioun vum Zil, duerno IMAP-Authentifikatioun.