Python'da HTTP proxy üzerinden TLS eş sertifikasını okuma
Soketi doğrulayan bir SSL bağlamına sarmadan önce Python'un HTTPConnection tünel desteğini kullanın.
ssl.get_server_certificate bir HTTP proxy ile anlaşma yapmaz. Önce tüneli kurun, ardından hedef ana bilgisayar adıyla TLS gerçekleştirin ve eş sertifikasını alın.
Kimlik doğrulaması olmayan bir HTTP proxy için HTTP proxy listesinden bir adayın ana bilgisayarını ve bağlantı noktasını kullanarak:
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 isteğini ve yanıtını işler. Ardından SSL bağlamı sertifika döndürülmeden önce zinciri ve hedefin kimliğini doğrular. Bu el sıkışması için hedefe HTTP GET gerekmez.
Ortam onaylı bir özel CA kullanıyorsa, doğrulamayı devre dışı bırakmak yerine o CA'yı bağlama yükleyin. Reddedilen bir zincir, gösterilen el sıkışmasının başarısız olmasına yol açar.
getpeercert eşin yaprak sertifikasını döndürür, otomatik olarak dışa aktarılan tam bir zinciri değil. Güvenilen TLS araya girmesiyle eş sertifikası, aracının bu ana bilgisayar adı için ürettiği sertifika olabilir. Başka bir yoldan gözlemlenen bir sertifikayla karşılaştırırken bu ayrımı koruyun.