From 03a817690d17922a1c90fa1740459cebf2091521 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Honza=20Kr=C3=A1l?= Date: Fri, 14 Nov 2014 15:31:49 +0100 Subject: [PATCH] Added support for client SSL certificates for https Thanks almer-fuel for the inital patch! --- elasticsearch/connection/http_requests.py | 6 +++++- elasticsearch/connection/http_urllib3.py | 7 +++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/elasticsearch/connection/http_requests.py b/elasticsearch/connection/http_requests.py index 61760396..4959e1b5 100644 --- a/elasticsearch/connection/http_requests.py +++ b/elasticsearch/connection/http_requests.py @@ -19,9 +19,12 @@ class RequestsHttpConnection(Connection): :arg verify_certs: whether to verify SSL certificates :arg ca_certs: optional path to CA bundle. By default standard requests' bundle will be used. + :arg client_cert: path to the file containing the private key and the + certificate """ def __init__(self, host='localhost', port=9200, http_auth=None, - use_ssl=False, verify_certs=False, ca_certs=None, **kwargs): + use_ssl=False, verify_certs=False, ca_certs=None, client_cert=None, + **kwargs): if not REQUESTS_AVAILABLE: raise ImproperlyConfigured("Please install requests to use RequestsHttpConnection.") @@ -37,6 +40,7 @@ class RequestsHttpConnection(Connection): host, port, self.url_prefix ) self.session.verify = verify_certs + self.session.cert = client_cert if ca_certs: if not verify_certs: raise ImproperlyConfigured("You cannot pass CA certificates when verify SSL is off.") diff --git a/elasticsearch/connection/http_urllib3.py b/elasticsearch/connection/http_urllib3.py index 7829ddd4..47e6bbaa 100644 --- a/elasticsearch/connection/http_urllib3.py +++ b/elasticsearch/connection/http_urllib3.py @@ -17,12 +17,14 @@ class Urllib3HttpConnection(Connection): :arg ca_certs: optional path to CA bundle. See http://urllib3.readthedocs.org/en/latest/security.html#using-certifi-with-urllib3 for instructions how to get default set + :arg client_cert: path to the file containing the private key and the + certificate :arg maxsize: the maximum number of connections which will be kept open to this host. """ def __init__(self, host='localhost', port=9200, http_auth=None, - use_ssl=False, verify_certs=False, ca_certs=None, maxsize=10, - **kwargs): + use_ssl=False, verify_certs=False, ca_certs=None, client_cert=None, + maxsize=10, **kwargs): super(Urllib3HttpConnection, self).__init__(host=host, port=port, **kwargs) self.headers = {} @@ -39,6 +41,7 @@ class Urllib3HttpConnection(Connection): if verify_certs: kw['cert_reqs'] = 'CERT_REQUIRED' kw['ca_certs'] = ca_certs + kw['cert_file'] = client_cert elif ca_certs: raise ImproperlyConfigured("You cannot pass CA certificates when verify SSL is off.")