ssl.get_server_certificate HTTP ପ୍ରକ୍ସି ସହିତ ବୁଝାମଣା କରେ ନାହିଁ। ପ୍ରଥମେ ଟନେଲ ସ୍ଥାପନ କରନ୍ତୁ, ତାପରେ ଗନ୍ତବ୍ୟର ହୋଷ୍ଟନାମ ସହିତ TLS କରନ୍ତୁ ଏବଂ ପିଅର ପ୍ରମାଣପତ୍ର ପାଆନ୍ତୁ।

ପ୍ରମାଣୀକରଣ ନଥିବା HTTP ପ୍ରକ୍ସି ପାଇଁ, 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)

HTTPConnection CONNECT ଅନୁରୋଧ ଏବଂ ଏହାର ପ୍ରତିକ୍ରିୟା ପରିଚାଳନା କରେ। ତାପରେ SSL ପ୍ରସଙ୍ଗ ପ୍ରମାଣପତ୍ର ଫେରାଇବା ପୂର୍ବରୁ ଶୃଙ୍ଖଳା ଏବଂ ଗନ୍ତବ୍ୟର ପରିଚୟ ଯାଞ୍ଚ କରେ। ଏହି ହ୍ୟାଣ୍ଡସେକ ପାଇଁ ଗନ୍ତବ୍ୟକୁ କୌଣସି HTTP GET ଆବଶ୍ୟକ ନାହିଁ।

ଯଦି ପରିବେଶ ଅନୁମୋଦିତ ଘରୋଇ CA ବ୍ୟବହାର କରେ, ଯାଞ୍ଚ ବନ୍ଦ କରିବା ପରିବର୍ତ୍ତେ ସେହି CA ପ୍ରସଙ୍ଗରେ ଲୋଡ୍ କରନ୍ତୁ। ପ୍ରତ୍ୟାଖ୍ୟାତ ଶୃଙ୍ଖଳା ଦେଖାଯାଇଥିବା ହ୍ୟାଣ୍ଡସେକକୁ ବିଫଳ କରେ।

getpeercert ପିଅରର ପତ୍ର ପ୍ରମାଣପତ୍ର ଫେରାଏ, ସ୍ୱୟଂଚାଳିତ ଭାବରେ ରପ୍ତାନି ହୋଇଥିବା ସମ୍ପୂର୍ଣ୍ଣ ଶୃଙ୍ଖଳା ନୁହେଁ। ବିଶ୍ୱସନୀୟ TLS ଅବରୋଧ ସହିତ, ପିଅର ପ୍ରମାଣପତ୍ର ଏହି ହୋଷ୍ଟନାମ ପାଇଁ ମଧ୍ୟସ୍ଥ ଦ୍ୱାରା ନିର୍ମିତ ପ୍ରମାଣପତ୍ର ହୋଇପାରେ। ଅନ୍ୟ ପଥରେ ଦେଖାଯାଇଥିବା ପ୍ରମାଣପତ୍ର ସହିତ ତୁଳନା କରିବାବେଳେ ସେହି ପାର୍ଥକ୍ୟ ରଖନ୍ତୁ।

ସମ୍ପର୍କିତ ପ୍ରବନ୍ଧ