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 ಪ್ರತಿಬಂಧದೊಂದಿಗೆ, ಪೀರ್ ಪ್ರಮಾಣಪತ್ರವು ಈ ಹೋಸ್ಟ್‌ಹೆಸರಿಗೆ ಮಧ್ಯವರ್ತಿಯು ರಚಿಸಿದ ಪ್ರಮಾಣಪತ್ರವಾಗಿರಬಹುದು. ಬೇರೆ ಮಾರ್ಗದಲ್ಲಿ ಗಮನಿಸಿದ ಪ್ರಮಾಣಪತ್ರದೊಂದಿಗೆ ಹೋಲಿಸುವಾಗ ಆ ವ್ಯತ್ಯಾಸವನ್ನು ಉಳಿಸಿಕೊಳ್ಳಿ.

ಸಂಬಂಧಿತ ಲೇಖನಗಳು