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 અવરોધ સાથે, પીઅર પ્રમાણપત્ર આ હોસ્ટનામ માટે મધ્યસ્થ દ્વારા બનાવેલું પ્રમાણપત્ર હોઈ શકે છે. બીજા માર્ગે જોયેલા પ્રમાણપત્ર સાથે સરખાવતી વખતે તે ભેદ જાળવો.

સંબંધિત લેખો