ssl.get_server_certificate פֿאַרהאַנדלט נישט מיט אַן HTTP פּראָקסי. שטעלט אויף דעם טונעל ערשט, דערנאָך פֿירט אויס TLS מיט דעם ציל האָסט נאָמען און באַקומט דעם פּיר סערטיפֿיקאַט.

פֿאַר אַן HTTP פּראָקסי אָן אויטענטיפֿיקאַציע, מיט דעם האָסט און פּאָרט פֿון אַ קאַנדידאַט פֿון דער HTTP פּראָקסי ליסטע:

from contextlib import closing
import http.client
import ssl

hostname = "example.com"
context = ssl.create_default_context()

with closing(http.client.HTTPConnection(
    "proxy.example.net", 8080, timeout=10
)) as connection:
    connection.set_tunnel(hostname, 443)
    connection.connect()

    with context.wrap_socket(
        connection.sock, server_hostname=hostname
    ) as tls:
        certificate_der = tls.getpeercert(binary_form=True)

certificate_pem = ssl.DER_cert_to_PEM_cert(certificate_der)

HTTPConnection באַהאַנדלט די CONNECT בקשה און איר ענטפֿער. דערנאָך וועריפֿיצירט דער SSL קאָנטעקסט די קייט און די אידענטיטעט פֿון דעם ציל איידער דער סערטיפֿיקאַט ווערט צוריקגעגעבן. קיין HTTP GET צום ציל איז נישט נייטיק פֿאַר דעם האַנטשאַק.

אויב די סביבה ניצט אַ באַשטעטיקטע פּריוואַטע CA, לאָדט אַרײַן די CA אין דעם קאָנטעקסט אַנשטאָט אָפּשטעלן וועריפֿיקאַציע. אַ אָפּגעוואָרפֿענע קייט מאַכט דעם געוויזענעם האַנטשאַק דורכפֿאַלן.

getpeercert גיט צוריק דעם בלאַט סערטיפֿיקאַט פֿון דעם פּיר, נישט אַן אויטאָמאַטיש עקספּאָרטירטע פֿולע קייט. מיט אַ פֿאַרטרויטלעכער TLS אונטערהאַכפּונג, קען דער פּיר סערטיפֿיקאַט זײַן דער סערטיפֿיקאַט וואָס דער מיטל האָט געשאַפֿן פֿאַר דעם האָסט נאָמען. האַלט דעם אונטערשייד ווען איר פֿאַרגלײַכט עס מיט אַ סערטיפֿיקאַט וואָס איז באַאַכטעט געוואָרן דורך אַן אַנדער וועג.

פֿאַרבונדענע אַרטיקלען