Source code for prestoadmin.util.httpscacertconnection
import socket
import ssl
import httplib
# Adapted from http://code.activestate.com/recipes/577548-https-httplib-client-connection-with-certificate-v/
# BSD-licensed.
[docs]class HTTPSCaCertConnection(httplib.HTTPSConnection):
""" Class to make a HTTPS connection, with support for full client-based SSL Authentication"""
def __init__(self, host, port, key_file, cert_file, ca_file, strict, timeout=None):
httplib.HTTPSConnection.__init__(self, host, port, key_file, cert_file, strict, timeout)
self.key_file = key_file
self.cert_file = cert_file
self.ca_file = ca_file
self.timeout = timeout
[docs] def connect(self):
""" Connect to a host on a given (SSL) port.
If ca_file is pointing somewhere, use it to check Server Certificate.
Redefined/copied and extended from httplib.py:1105 (Python 2.6.x).
This is needed to pass cert_reqs=ssl.CERT_REQUIRED as parameter to ssl.wrap_socket(),
which forces SSL to check server certificate against our client certificate.
"""
sock = socket.create_connection((self.host, self.port), self.timeout)
if self._tunnel_host:
self.sock = sock
self._tunnel()
# If there's no CA File, don't force Server Certificate Check
if self.ca_file:
self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file, ca_certs=self.ca_file,
cert_reqs=ssl.CERT_REQUIRED)
else:
self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file, cert_reqs=ssl.CERT_NONE)