network_interface=None, streaming_callback=None,
header_callback=None, prepare_curl_callback=None,
proxy_host=None, proxy_port=None, proxy_username=None,
- proxy_password='', allow_nonstandard_methods=False):
+ proxy_password='', allow_nonstandard_methods=False,
+ validate_cert=True, ca_certs=None):
if headers is None:
headers = httputil.HTTPHeaders()
if if_modified_since:
self.header_callback = header_callback
self.prepare_curl_callback = prepare_curl_callback
self.allow_nonstandard_methods = allow_nonstandard_methods
+ # SSL certificate validation:
+ # validate_cert: boolean, set to False to disable validation
+ # ca_certs: filename of CA certificates in PEM format, or
+ # None to use defaults
+ self.validate_cert = validate_cert
+ self.ca_certs = ca_certs
self.start_time = time.time()
curl.setopt(pycurl.PROXYUSERPWD, credentials)
else:
curl.setopt(pycurl.PROXY, '')
+ curl.setopt(pycurl.SSL_VERIFYPEER, request.validate_cert)
+ if request.ca_certs is not None:
+ curl.setopt(pycurl.CAINFO, request.ca_certs)
+ else:
+ curl.unsetopt(pycurl.CAINFO)
# Set the request method through curl's retarded interface which makes
# up names for almost every single method
host = self.client.hostname_mapping.get(host, host)
if parsed.scheme == "https":
- ssl_options = dict(
- cert_reqs=ssl.CERT_REQUIRED,
- ca_certs=os.path.dirname(__file__) + '/ca-certificates.crt',
- )
+ ssl_options = {}
+ if request.validate_cert:
+ ssl_options["cert_reqs"] = ssl.CERT_REQUIRED
+ if request.ca_certs is not None:
+ ssl_options["ca_certs"] = request.ca_certs
+ else:
+ ssl_options["ca_certs"] = (os.path.dirname(__file__) +
+ '/ca-certificates.crt')
self.stream = SSLIOStream(socket.socket(),
io_loop=self.io_loop,
ssl_options=ssl_options)
keyfile=os.path.join(test_dir, 'test.key')))
def fetch(self, path, **kwargs):
- def disable_cert_check(curl):
- # Our certificate was not signed by a CA, so don't check it
- curl.setopt(pycurl.SSL_VERIFYPEER, 0)
self.http_client.fetch(self.get_url(path).replace('http', 'https'),
self.stop,
- prepare_curl_callback=disable_cert_check,
+ validate_cert=False,
**kwargs)
return self.wait()