ssl.get_server_certificate HTTP proxy සමඟ සාකච්ඡා නොකරයි. පළමුව උමං ස්ථාපිත කරන්න, පසුව ගමනාන්තයේ hostname සමඟ TLS සිදු කර peer සහතිකය ලබා ගන්න.

සත්‍යාපනයක් නොමැති HTTP proxy සඳහා, HTTP proxy ලැයිස්තුවෙන් අපේක්ෂකයෙකුගේ host සහ port භාවිත කරමින්:

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 peer හි පත්‍ර සහතිකය ආපසු දෙයි, ස්වයංක්‍රීයව අපනයනය කළ සම්පූර්ණ දාමය නොවේ. විශ්වාසනීය TLS බාධා කිරීමක් සමඟ, peer සහතිකය මෙම hostname සඳහා මැදිහත්කරු විසින් සාදන ලද සහතිකය විය හැක. වෙනත් මාර්ගයකින් නිරීක්ෂණය කළ සහතිකයක් සමඟ සංසන්දනය කිරීමේදී එම වෙනස රඳවා ගන්න.

අදාළ ලිපි