ssl.get_server_certificate ne intertraktas HTTP-prokurilon. Unue starigu la tunelon, poste plenumu TLS kun la gastiga nomo de la celo kaj akiru la samrangan atestilon.

Por HTTP-prokurilo sen aŭtentigo, uzante la gastiganton kaj pordon de kandidato el la listo de HTTP-prokuriloj:

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 pritraktas la peton CONNECT kaj ĝian respondon. Poste la SSL-kunteksto kontrolas la ĉenon kaj la identecon de la celo antaŭ ol la atestilo estas redonita. Neniu HTTP GET al la celo necesas por ĉi tiu manpremo.

Se la medio uzas aprobitan privatan CA, ŝargu tiun CA en la kuntekston anstataŭ malŝalti kontroladon. Rifuzita ĉeno igas la montritan manpremon malsukcesi.

getpeercert redonas la folian atestilon de la samrangulo, ne aŭtomate eksportitan kompletan ĉenon. Ĉe fidinda TLS-interceptado, la samranga atestilo povas esti la atestilo generita de la peranto por ĉi tiu gastiga nomo. Konservu tiun distingon kiam vi komparas ĝin kun atestilo observita per alia vojo.

Rilataj artikoloj