import ssl
import urllib3

proxy_tls = ssl.create_default_context(cafile='proxy-roots.pem')
proxy_tls.load_cert_chain('proxy-client.pem', 'proxy-client.key')
origin_tls = ssl.create_default_context()

with urllib3.ProxyManager(
    'https://proxy.example:8443',
    proxy_ssl_context=proxy_tls,
    ssl_context=origin_tls,
    timeout=urllib3.Timeout(connect=5, read=15),
) as http:
    response = http.request('GET', 'https://service.example/data')

Χρησιμοποιήστε τα πραγματικά εγκεκριμένα αρχεία. Το proxy-roots.pem επαληθεύει τον μεσάζοντα· το proxy-client.pem και το αντίστοιχο ιδιωτικό κλειδί ταυτοποιούν αυτόν τον πελάτη σε αυτόν τον μεσάζοντα. Το origin_tls διατηρεί την ξεχωριστή πολιτική εμπιστοσύνης του προορισμού.

Το σχήμα https της διεύθυνσης URL του proxy είναι απαραίτητο για αυτήν την πρώτη ανταλλαγή TLS. Για στόχο HTTPS, το urllib3 στέλνει στη συνέχεια CONNECT μέσα στην εξωτερική συνεδρία TLS και εκτελεί το TLS του ιστότοπου μέσω της σήραγγας.

Αν ο ιστότοπος απαιτεί επίσης πιστοποιητικό πελάτη, τοποθετήστε το στο origin_tls. Η επαναχρησιμοποίηση της ταυτότητας του proxy εκεί θα πιστοποιούσε διαφορετική σύνδεση.

Ένα συνηθισμένο proxy HTTP που μεταφέρει HTTPS δεν έχει εξωτερική χειραψία TLS. Ένα επιπλέον HTTP 407 είναι επίσης ξεχωριστό: η παροχή πιστοποιητικού πελάτη δεν παρέχει διαπιστευτήρια ονόματος χρήστη/κωδικού.

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