ssl.get_server_certificate haifanyi mazungumzo na proksi ya HTTP. Anzisha handaki kwanza, kisha fanya TLS na jina la mwenyeji lengwa na upate cheti cha peer.

Kwa proksi ya HTTP isiyo na uthibitishaji, ukitumia mwenyeji na bandari ya mteule kutoka orodha ya proksi za 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 hushughulikia ombi la CONNECT na jibu lake. Kisha muktadha wa SSL huthibitisha mnyororo na utambulisho wa lengo kabla ya cheti kurejeshwa. Hakuna HTTP GET kwa lengo inayohitajika kwa makubaliano haya ya mkono.

Ikiwa mazingira yanatumia CA ya kibinafsi iliyoidhinishwa, pakia CA hiyo kwenye muktadha badala ya kuzima uthibitishaji. Mnyororo uliokataliwa hufanya makubaliano ya mkono yaliyoonyeshwa yashindwe.

getpeercert hurudisha cheti cha jani cha peer, si mnyororo kamili uliosafirishwa kiotomatiki. Kwa uingiliaji wa TLS unaoaminika, cheti cha peer kinaweza kuwa cheti kilichotengenezwa na mpatanishi kwa jina hili la mwenyeji. Hifadhi tofauti hiyo unapokilinganisha na cheti kilichoonekana kupitia njia nyingine.

Makala zinazohusiana