ssl.get_server_certificate ez da HTTP proxy batekin negoziatzen. Lehenengo tunela ezarri, gero TLS egin helmugako ostalari-izenarekin eta lortu parekoaren ziurtagiria.

Autentifikaziorik gabeko HTTP proxy baterako, HTTP proxy zerrendako hautagai baten ostalaria eta portua erabiliz:

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)

HTTPConnectionek CONNECT eskaera eta haren erantzuna kudeatzen ditu. Ondoren, SSL testuinguruak katea eta helmugaren identitatea egiaztatzen ditu ziurtagiria itzuli aurretik. Esku-emate honetarako ez da HTTP GETrik behar helmugara.

Inguruneak onartutako CA pribatu bat erabiltzen badu, kargatu CA hori testuinguruan egiaztapena desgaitzearen ordez. Baztertutako kate batek erakutsitako esku-ematea hutsarazten du.

getpeercert-ek parekoaren hosto-ziurtagiria itzultzen du, ez automatikoki esportatutako kate osoa. TLS atzemate fidagarriarekin, parekoaren ziurtagiria bitartekariak ostalari-izen honetarako sortutako ziurtagiria izan daiteke. Mantendu bereizketa hori beste bide batetik behatutako ziurtagiri batekin alderatzean.

Erlazionatutako artikuluak