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 مداخلت کے ساتھ، پیر سرٹیفکیٹ اس ہوسٹ نام کے لیے بیچوان کا تیار کردہ سرٹیفکیٹ ہو سکتا ہے۔ کسی دوسرے راستے سے دیکھے گئے سرٹیفکیٹ سے موازنہ کرتے وقت یہ فرق برقرار رکھیں۔