Nid yw ssl.get_server_certificate yn trafod proesi HTTP. Sefydlwch y twnnel yn gyntaf, yna gwnewch TLS gydag enw gwesteiwr y gyrchfan a chael tystysgrif y cymar.

Ar gyfer proesi HTTP heb ddilysu, gan ddefnyddio gwesteiwr a phorth ymgeisydd o'r rhestr proesi 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)

Mae HTTPConnection yn trin y cais CONNECT a'i ateb. Yna mae'r cyd-destun SSL yn gwirio'r gadwyn a hunaniaeth y gyrchfan cyn dychwelyd y dystysgrif. Nid oes angen HTTP GET i'r gyrchfan ar gyfer y llawgydiad hwn.

Os yw'r amgylchedd yn defnyddio CA breifat gymeradwy, llwythwch y CA honno i'r cyd-destun yn lle analluogi dilysu. Mae cadwyn a wrthodwyd yn gwneud y llawgydiad a ddangosir yn methu.

Mae getpeercert yn dychwelyd tystysgrif ddalen y cymar, nid cadwyn gyflawn a allforiwyd yn awtomatig. Gyda rhyng-gipio TLS ymddiriedus, gall tystysgrif y cymar fod y dystysgrif a gynhyrchwyd gan y cyfryngwr ar gyfer yr enw gwesteiwr hwn. Cadwch y gwahaniaeth hwnnw wrth ei chymharu â thystysgrif a welwyd drwy lwybr arall.

Erthyglau cysylltiedig