Python ನಲ್ಲಿ HTTP ಪ್ರಾಕ್ಸಿ ಮೂಲಕ TLS ಪೀರ್ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಓದಿ
ಸಾಕೆಟ್ ಅನ್ನು ಮೌಲ್ಯೀಕರಿಸುವ SSL ಸಂದರ್ಭಕ್ಕೆ ಸುತ್ತುವ ಮೊದಲು Python ನ HTTPConnection ಟನೆಲ್ ಬೆಂಬಲವನ್ನು ಬಳಸಿ.
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 ಪ್ರತಿಬಂಧದೊಂದಿಗೆ, ಪೀರ್ ಪ್ರಮಾಣಪತ್ರವು ಈ ಹೋಸ್ಟ್ಹೆಸರಿಗೆ ಮಧ್ಯವರ್ತಿಯು ರಚಿಸಿದ ಪ್ರಮಾಣಪತ್ರವಾಗಿರಬಹುದು. ಬೇರೆ ಮಾರ್ಗದಲ್ಲಿ ಗಮನಿಸಿದ ಪ್ರಮಾಣಪತ್ರದೊಂದಿಗೆ ಹೋಲಿಸುವಾಗ ಆ ವ್ಯತ್ಯಾಸವನ್ನು ಉಳಿಸಿಕೊಳ್ಳಿ.