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 अवरोधनका साथ, पियर प्रमाणपत्र यो होस्टनामका लागि मध्यस्थकर्ताले बनाएको प्रमाणपत्र हुन सक्छ। अर्को मार्गबाट देखिएको प्रमाणपत्रसँग तुलना गर्दा त्यो भिन्नता कायम राख्नुहोस्।

सम्बन्धित लेखहरू