የTLS አጋር ሰርተፊኬትን በPython በHTTP ፕሮክሲ በኩል ማንበብ
የPython HTTPConnection የቱኔል ድጋፍን ከመጠቀም በፊት ሶኬቱን በሚያረጋግጥ SSL አውድ መጠቅለል።
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 ጣልቃገብነት፣ የአጋር ሰርተፊኬቱ የመሃከለኛው ለዚህ አስተናጋጅ ስም የፈጠረው ሰርተፊኬት ሊሆን ይችላል። ከሌላ መንገድ ከተገኘ ሰርተፊኬት ጋር ሲያወዳድሩ ይህን ልዩነት ይጠብቁ።