Python में HTTP प्रॉक्सी के माध्यम से TLS पीयर प्रमाणपत्र पढ़ें
सॉकेट को सत्यापन करने वाले SSL संदर्भ में लपेटने से पहले Python के HTTPConnection टनल समर्थन का उपयोग करें।
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 अवरोधन के साथ, पीयर प्रमाणपत्र इस होस्टनाम के लिए मध्यस्थ द्वारा बनाया गया प्रमाणपत्र हो सकता है। किसी अन्य मार्ग से देखे गए प्रमाणपत्र से तुलना करते समय यह अंतर बनाए रखें।