Darllen tystysgrif cymar TLS drwy brocsi HTTP yn Python
Defnyddiwch gefnogaeth twnnel HTTPConnection Python cyn lapio'r soced mewn cyd-destun SSL sy'n dilysu.
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.