mirror of
https://github.com/internetarchive/warcprox.git
synced 2025-01-18 13:22:09 +01:00
send requested hostname to remote server if python ssl version supports SNI, fixes ssl handshake error for some servers
This commit is contained in:
parent
1abe98c99b
commit
b07f194c63
@ -21,16 +21,7 @@ class MitmProxyHandler(http_server.BaseHTTPRequestHandler):
|
||||
|
||||
def __init__(self, request, client_address, server):
|
||||
self.is_connect = False
|
||||
|
||||
## XXX hack around bizarre bug on my mac python 3.2 in http.server
|
||||
## where hasattr returns true in the code snippet below, but
|
||||
## self._headers_buffer is None
|
||||
#
|
||||
# if not hasattr(self, '_headers_buffer'):
|
||||
# self._headers_buffer = []
|
||||
# self._headers_buffer.append(
|
||||
self._headers_buffer = []
|
||||
|
||||
http_server.BaseHTTPRequestHandler.__init__(self, request, client_address, server)
|
||||
|
||||
def _determine_host_port(self):
|
||||
@ -63,7 +54,17 @@ class MitmProxyHandler(http_server.BaseHTTPRequestHandler):
|
||||
|
||||
# Wrap socket if SSL is required
|
||||
if self.is_connect:
|
||||
self._proxy_sock = ssl.wrap_socket(self._proxy_sock)
|
||||
try:
|
||||
context = ssl.create_default_context()
|
||||
context.check_hostname = False
|
||||
context.verify_mode = ssl.CERT_NONE
|
||||
self._proxy_sock = context.wrap_socket(self._proxy_sock, server_hostname=self.hostname)
|
||||
except AttributeError:
|
||||
try:
|
||||
self._proxy_sock = ssl.wrap_socket(self._proxy_sock)
|
||||
except ssl.SSLError:
|
||||
self.logger.warn("failed to establish ssl connection to {}; python ssl library does not support SNI, considering upgrading to python >= 2.7.9 or python 3.4".format(self.hostname))
|
||||
raise
|
||||
|
||||
def _transition_to_ssl(self):
|
||||
self.request = self.connection = ssl.wrap_socket(self.connection,
|
||||
|
Loading…
x
Reference in New Issue
Block a user